Class 코드에 적용하기
간단한 예제로 적용시키자.
calc.h
calc.cpp
선언을 calc.cpp를 새로 만들어서 다 몰아 넣었다. 이렇게 굳이 안하고 calc.h에 정의도 함께 해도 상관없다.
2. class 객체도 const 가능
- set, get 둘다 불가능
- 가능하게 하려면 reuturn 함수에 const 붙여야됨
3. copy constructor
: runnable에서 class를 인수로 받아서 쓸때, 복사는 해오지만, 이 copy constructor를 사용해서 복사본 생성해서 runnable 안에서 사용한다.
근데 사실 copy 하는게 메모리가 아깝기 때문에 class를 받아서 runnable에서 사용할때는 웬만하면 const reference 사용!
4. const 공부
참고)https://blog.codingcat.kr/24
우선 const는 들어갈 수 있는 위치가 많다
const 자료형 const 포인터 const 변수명;
ex)
1) const int ** foo; -> (const int) ** foo;
const int a =10;
const int * b = &a;
const int **c = &b;
-> 알맹이인 a가 상수처리!
2) int * const * foo -> (int* const) * foo;
int a =10;
int * const b = &a;
int * const *c = &b;
->이 경우에 알맹이인 a는 변경가능!
-> 알맹이의 주소값(b)을 변경 못하게 하겠다는 것
3) int ** const foo -> (int **) const a;
-> 이경우 이중포인터만 상수 처리
간단 정리(이중 포인터 XX)
1) 알맹이가 상수
- a 값을 못바꿈
- 주소를 바꿀 수는 있음
2) 참조해주는 변수를 못바꾸게 하는것
알맹이를 직접 바꾸는건 가능하지만, 포인터 참조를 통해서는 XX
-> 가리키고 있는 주소에 있는 값을 안바꾼다는 뜻이지, 주소값을 안바꾼다는 소리는 아님!!!!
3) 포인터 자체가 const
-> 진짜 주소값을 못바꾸는 경우
찐찐 최종 정리
1. * 뒤에 const가 붙으면 주소값을 못바꾸는것
2. * 와 자료형 앞에 const가 붙으면 참조를 통한 변화를 막겠다는 것
3. 포인터가 가르키는 값에 const가 붙어 있다면, *와 자료형 앞에 const를 붙여야 된다(강제)