Q. 다음 코드는 2가지 면에서 오류가 난다. 그 이유는 ?
class Point
{
private:
int Number;
const int const _Number;
public:
int MinusNumber(int _Numver) const
{
Number = _Numver;
}
};
void main()
{
Point NewTest = Point();
NewTest.MinusNumber(20);
}
(1) 일단 Const가 붙은 함수는 함수 내에서 Class 내의 변수 수정이 불가하다.
(2) Const변수는 초기화가 되어야 하는데 안 되어있다.
그렇다면 Const변수는 어떻게 초기화를 할 수 있을까?
Point(int Num)
{
_Number = Num;
}
이렇게 생성자에 해주면 될 것 같지만, 메모리 구조상 생성자가 호출되기 전인 const int const _Number; 이라고 선언과 동시에 쓰레기값으로 채워지므로 초기화가 끝나버린다.
이러한 경우 이니셜라이저로 초기화해야한다. 이니셜라이저는 생성자가 호출되기 이전에 완료가 된다는 특징을 가지므로 Const변수를 초기화 할 수 있다.
Point(int Num = 0)
: _Number(Num)
{
}
+ Const변수의 종류와 데이터영역
const int Const_Global_Var = 10; -> 뒤에붙은것이 상수이므로 상수종류, code영역
int main()
{
int Value = 50;
const int Const_Range_Var1 = Value;-> 뒤에붙은것이 지역변수이므로 지역변수종류, stack영역
const int Const_Range_Var2 = 10;-> 뒤에붙은것이 상수이므로 상수종류, code영역
}
Const의 데이터 영역은 = 뒤에 붙어있는 값의 데이터영역을 따른다.
= 뒤에 붙은것이 상수면 전역변수라도 종류는 상수가되며 데이터영역은 Code이다.
'STUDY > C++' 카테고리의 다른 글
new 와 new []의 차이점 (0) | 2019.06.10 |
---|---|
[ STL ] 표준 시퀀스 컨테이너(vector, deque, list) (0) | 2018.03.12 |
상속과 동적,정적바인딩 (0) | 2018.02.28 |
Class내에서의 Static (0) | 2018.02.27 |
[ Const 1편 ] 변수와 함수에서의 Const (0) | 2018.02.26 |