3) 변수 타입
3-1. 변수
- 정의 : 이름을 할당받은 메모리 공간 -> 이 공간에 데이터를 저장
- 종류 : 정수(char, int, long, long long), 실수(float, double, long double), 사용자 정의 구조체
- bool 타입도 존재함!!
3-2. 변수가 저장하고 있는 것
- 데이터가 저장된 메모리의 주소
- 저장된 데이터의 길이
- 데이터의 형태
- 데이터 값
3-2. 변수 사용하기
- 변수 선언 : 메모리 공간 확보
- 변수 초기화 : 메모리 공간에 저장된 값(쓰레기값)을 초기화
int first = 15, second = 5; //선언과 초기화를 동시에 할 수 있음.
3-3. 상수
-
값을 변경할 수 없는 변수
-
literal constant (ex,
345
)- 정수형 상수를 8진수, 16진수로 출력하기 위해 cout객체의 oct,hex 사용가능
std::cout << std::oct; std::cout << "숫자 10을 8진수로 표현하면 " << 10; // 숫자 10을 8진수로 표현하면 12
nullptr
: 아무것도 가리키고 있지 않는 포인터를 나타내기 위한 키워드- 접미사를 추가하여 저장되는 타입을 명시가능
-
symblic constant (ex,
const int ages = 30;
)- 매크로 상수 (
#define
)보다 권장되는 문법
- 매크로 상수 (
3-4. auto 키워드
#include <iostream>
#include <typeinfo> // operator typeid
int main()
{
auto real = 5.0;
auto integer = 1 + 2;
std::cout << typeid(real).name() // d (double)
std::cout << typeid(integer).name() // i (integer)
}
auto
키워드를 통해서 타입을 자동으로 정해줌.
3-5. Type conversion
C++에서는 다른 타입끼리 연산을 할 때, 우선 피연산자들을 같은 타입으로 만들고 연산합니다.
위와 같이 자동으로 변환해주는 경우도 있고, 강제로 변환하는 방식도 존재합니다.
-
자동 타입 변환
ex) 덧셈연산 -> 변수 선언
int res1 = 3.14; // 3.14(d) -> 3(d) int res2 = 5.6f + 3.14 // 5.6(d) + 3.14(d) = 8.74(d) -> 8(i) int res3 = 5.9f + 3.14 // 5.9(d) + 3.14(d) = 9.04(d) -> 9(i)
데이터 손실을 최소화하는 방향으로 진행됩니다.
-
강제 타입 변환
- (변환할타입) 변환할데이터
- C언어와 C++ 둘 다 사용 가능함.
- 변환할타입 (변환할데이터)
- C++에서만 사용 가능함.
- (변환할타입) 변환할데이터
4) 연산자
연산자마다 우선순위 표가 있긴 한데 외우기보다는 필요할 때마다 참조하는게 편합니다.
4-1. 기본적인 연산자
-
산술 연산자 :
+, -, *, /, %
(파이썬과 동일) -
대입 연산자 :
=, +=, -=, *=, /=, %=
(파이썬과 동일)- !!주의!!
num=+5
라고 하면 5가 저장됨.
- !!주의!!
-
증감 연산자 :
++x, x++, --x, x--
- Zen of Python에 따르면,
x++
는x+=1
로 대체할 수 있기 때문에 파이썬에는 증감 연산자가 없다고 합니다..
- Zen of Python에 따르면,
-
비교 연산자 :
==, !=, >, >=, <, <=
-
논리 연산자 :
&&, ||, !
- 비교/논리 연산자의 결과값은 true, false가 아니라 0,1로 출력됨!
-
비트 연산자 :
&, |, ^, ~, <<, >>
-
삼항 연산자 :
조건식 ? 반환값 1 : 반환값 2
- 파이썬의
반환값 1 if 조건식 else 반환값 2
와 동일합니다.
- 파이썬의
-
sizeof
연산자 : 변수의 저장공간 크기sizeof(long long); // 8 sizeof(5); // int 상수값이니까 4
4-2. C++만의 연산자
http://tcpschool.com/cpp/cpp_operator_cpp
-
범위 지정 연산자(scope resolution operator)
::
왼쪽에 있는 범위로 제한함.
ex) header1 namespace로 제한하기.
int x = 5; namespace header1 { int x = 4; } int main(){ header1::x; // 4 }
클래스명::x
=> static 멤버 & namespace 멤버(파이썬에서는__dict
) 를 가져올 수 있습니다.::x
: 전역변수
-
멤버 포인터 연산자
클래스타입의객체.*멤버이름
: 멤버변수의 포인터 를가져옴.클래스타입객체의포인터->*멤버이름
: 이것도 똑같음.
-
typeid 연산자
#include <typeinfo>
5) 조건문, 반복문, 제어문
5-1. 기본적인 조건문, 반복문, 제어문
- if
- if / else
- if / else if / else
- while
- do / while
- for
- continue / break
5-2. 그 외
-
switch문 : else if문의 확장판
상당히 최적화되어 있어서 if/else문을 쓰는거보다 효율적이라고 합니다.
switch (num)
{
case 1:
cout << "입력하신 수는 1입니다." << endl;
case 2:
cout << "입력하신 수는 2입니다." << endl;
case 3:
cout << "입력하신 수는 3입니다." << endl;
default:
cout << "1부터 5까지의 수만 입력해 주세요!" << endl;
}
- for문의 변형문법 : 파이썬의 iterator와 비슷함.
int arr[5] = {1,2,3,4,5};
for (int el : arr){
std::cout << el;
}
- goto문 !!비추천!! : 지정한 label로 무조건 변경시키는 명령문