01. C++ 기초사항
C++ 기초 사항
- 프로그램 구조
- main 함수
- 프로그램의 진입점(entry point)
- #include
- 외부 프로그램 소스를 포함시키는 메크로
- iostream
- 입출력 관련 기본 라이브러리
- std 네임스페이스를 정의
- ::
- 스코프 연산자
- 어디에 정의된 것인지 지정할 때 사용
- using namespace
- 네임스페이스 생략을 위해 지정 (std::cout -> cout)
< ex01_hello.cpp >
#include <iostream>
// # 붙으면 c++에선 추상의미 전처리를 하라! preprocessing
// <iostream> 모듈! 인클루드가 파이썬에서 쓰는 용어로 import
// 입출력과 관련된 모듈(c++에선 라이브러리라고 부름)
using namespace std;
// standard 표준 의미
// 기본으로 namespace std로 쓰겠다
int main(int argc, char const *argv[]) // 괄호에 매개변수 있으면 함수
// 파이썬에선 def, c++에선 바로 함수 명을 이용해서 정의내림
// 데이터타입을 사전에 명시해줘야 함, 정의한 데이터타입만 사용할 수 있음
//함수의 리턴타입도 명시해줘야 함 -> 지금 보는 데에선 int
// 변수도 데이터 타입 명시해줘야 함
{ // 파이썬에선 코드블럭을 들여쓰기로 했지만 c++에선 중괄호{} 이용해서 코드블럭 지정
cout << "Hello I am Jonga" << endl;
// cout(console out), 데이터의 값을 출력할 때 사용하는 객체
// << -> 데이터 전송하겠다 그 옆에 전송할 데이터 적어준다
// 이 데이터를 cout으로 보내라(왼쪽객체에게)
// 또 전송할 데이터가 있다면 <<를 또 쓰면 된다
// endl -> 줄 바꾸는 상수
std::cout << "Hello I am Jonga" << std::endl << "종아";
// cout의 사용법은 두 가지
// cout은 std라는 namespace에 정의되어 있음, using문 안 써줬다면 이렇게 적어줘야 함
return 0;
// int로 리턴한다고 했으니! 데이터타입 일치해야 함
// 이 함수의 실행을 끝내겠다는 의미로 리턴
}
// 모든 언어에서는 이름충돌이 생기기 마련이다
// c++에선 namespace로 이름충돌 다룬다
// cout이라는 식별자는 std의 범주 아래 정의하고 있는 것
// std::cout -> 다른::cout이 아니라 std에서 정의한 cout이다
// 코드러너로 실행 -> ctrl + alt + N
// ex01_hello.cpp:16:5: error: 'cout' was not declared in this scope
// using namespace 안 쓰면 생기는 오류, cout이 어디 소속인지 모르겠다
// 코드를 실행하면 .exe라는 실행파일이 생긴다
// 파이썬과 c++ 차이, 파이썬은 소스를 매번 파이썬이 실행시키는 방식
// c++은 컴파일해서 .exe를 만들어준다
< ex02_cout.cpp >
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]){
cout << 10;
cout << "개의 사과가 있습니다" << endl;
cout << 10 << "개의 사과가 있습니다 ";
return 0;
}
< ex03_variable.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
int i;
i = 1000;
// int i = 1000;
// int i {1000};
cout << i << endl;
string s {"hello"}; // string s = "hello";
cout << s << endl;
return 0;
}
- c++에선 문자열 표현할 때, 무조건 큰따옴표 ""로 묶어줘야 한다 (파이썬과 다르게 작은따옴표 안 된다'')
- c++에선 세미콜론;이 나와야 문장이 끝났다는 것
primitive datatype(기본데이터 타입)
자료형 설명바이트수
정수형 | short | short형 정수 | 2 |
int | 정수 | 4 | |
long | long형 정수 | 4 | |
long long | 64비트 정수 | 8 | |
문자형 | char | 문자 및 정수 | 1 |
부울형 | bool | 참이나 거짓을 나타낸다 | 1 |
부동소수점형 | float | 단일정밀도 부동소수점 | 4 |
double | 두배정밀도 부동소수점 | 8 | |
long double | 두배정밀도 부동소수점 | 8 |
< ex04_boolean.cpp >
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
bool b;
b = true;
cout << b << endl;
b = false;
cout << b;
return 0;
}
- boolean
-
true / false만 가질 수 있는 타입
- true -> 0이 아닌 모든 값, 일반적으로 1로 표현
- false -> 0
-
< ex05_char.cpp >
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
char ch;
ch = 'a';
cout << ch;
// ch = 'ab'; -> error
// ch = "a"; -> error
// ch = ''; -> error
return 0;
}
-
컴파일되려면 적어도 문법에러(context error)가 없어야 한다
- char
- 글자 하나를 저장하는 데이터 타입
- 작은 따옴포로 묶어서 글자 표현
< ex06_string.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]){
string s1 = "Good";
string s2 = "Morning";
string s3 = s1 + " " + s2 + "!";
cout << s3 << endl;
string s4 = "Good";
string s5 = "good";
bool b = (s4 == s5);
cout << b << endl;
return 0;
}
string
- 가장 적합한 데이터타입을 선정해야 한다
- string은 라이브러리의 객체로 지원된다, 기본데이터타입이 아니다
- 문자열을 저장하는 데이터 타입
- +연산자로 문자열 결합 가능
- ==로 내용 비교 가능
< ex07_const.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
const double TAX_RATE = 0.25;
int income = 1000;
income = income - TAX_RATE * income;
cout << income << endl;
return 0;
}
-
const
-
한 번 초기화하면 수정 불가
-
관례로 대문자로 이름 지정
-
상수 정의
-
const를 바꾸려고 하면 문법오류(신텍스?)가 난다 -> 실행파일이 안 만들어진다
-
에러에는 두 가지
문법오류, 런타임에러가 있다
< ex08_auto.cpp >
#include <iostream>
#include <string>
using namespace std;
auto add(int x, int y){
return x + y;
}
int main(int argc, char const *argv[]){
auto d = 1.0;
auto sum = add(3, 4);
cout << d << " " << sum << endl;
return 0;
}
-
auto
- 데이터타입을 직접 기입하는 것이 아니라 코드를 컴파일러가 분석해서 자동으로 결정할 때 사용하는 것이 auto
-
함수 안에 선언된 변수, 지역변수
-
함수 밖에 선언된 변수, 전역변수
< ex09_cout.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]) {
int i = 100;
cout << "변수 i의 값은 "; cout << i; cout << "입니다.";
cout << endl; cout << "변수 i의 값은 " << i<< "입니다." << endl;
// 연속사용 가능
return 0;
}
-
cout
-
객체
-
c(consol : 디폴트 입출력장치(키보드, 모니터))
-
<< (오른쪽의 데이터를 콘솔로 보내라)
-
연속 작업 사용 가능
-
< ex10_cin.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]){
int i;
cout << "integer : ";
cin >> i;
double d;
cout << "double : ";
cin >> d;
cout << i << " " << d << endl;
return 0;
}
-
cin
-
콘솔로부터 값을 입력받는 객체
-
변수의 데이터타입에 따라 자동으로 형변환해준다
-
데이터가 오른쪽으로 흘러가는 느낌 (>>)
-
-
cin에서 선언한 데이터타입이 아닌 것을 입력했을 경우
- 런타임에러가 난다
- 지금 내가 입력하는 데이터타입을 신경써야 한다
< ex11_cin.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]) {
string name;
cout << "이름을 입력하세요: ";
cin >> name; cout << name << "을 환영합니다." << endl;
return 0;
}
< ex12_op.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]){
int x = 100;
int y = 200;
int result = x + y;
cout << "x+y : " << result << endl;
cout << "x-y : " << x - y << endl;
cout << "x/y : " << x / y << endl;
cout << "x/y : " << x /(double)y << endl;
cout << "x % 3 : " << x % 3 << endl;
cout << 1/2 << endl;
cout << 1/2. << endl;
return 0;
}
-
연산자
-
/ 조심 -> 정수 / 정수 = 정수 (실수로 나오지 않는다)
-
ex) 1/2 => 0.5이지만 c++에서는 데이터타입이 고정되어 있기 때문에
-
정수 / 정수는 결과도 정수이다
-
0.5를 강제로 정수 0으로 만든다(소수점 나머지 버린다)
-
다른말로 말하면 몫연산
-
/ 의 결과값을 실수로 받고 싶다면 피연산자의 값을 float 혹은 double로 바꿔주면 된다
-
< ex13_incdec.cpp >
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]){
int x = 100;
x++;
cout << x << endl;
x--;
cout << x << endl;
cout << ++x << endl;
cout << x++ << endl;
cout << x << endl;
cout << --x << endl;
cout << x-- << endl;
cout << x << endl;
return 0;
}
101 100 101 101 102 101 101 100
-
증감연산자(변수 앞, 뒤에 붙는 경우에 따라서 달라짐)
- ++ : 현재 값에서 1 증가
- -- : 현재 값에서 1 감소