const 개념 정리
원문 출처
*멤버 → '클래스'와 관련된 개념
- 멤버 변수: 클래스 내부에 선언된 변수
클래스의 객체(인스턴스)가 가지는 속성(attribute), object의 상태를 저장하고 나타내며, 클래스의 모든 인스턴스가 공유
- 멤버 함수: 클래스 내부에 정의된 함수
object가 수행하는 동작(behavior)을 나타냄, 멤버 함수는 객체의 상태를 조작하거나 해당 객체와 관련된 작업을 수행
Const (4types)
1. const 변수
1-1) const '비'멤버 변수 (클래스 밖)
const int num = 1; // 일반적인 표현
int const num = 1; // 위와 같은 의미
num = 2; // Compile Error
1-2) const 멤버 변수 (클래스 안)
class Foo
{
const int num; // 메모리 할당이 아님
Foo(void)
: num(1) // const int num = 1;
{
}
};
class Bar
{
const int num;
Bar(void)
{
num = 1; // Compile Error
// const int num;
// num = 1;
}
};
const 변수는 반드시 선언 시 초기화를 해야 함
class의 멤버 변수를 const로 선언 시에는 반드시 초기화 리스트(Initialize List)를 사용해야 함
*C++11부터는 class 내부에서 const int num = 1;과 같이 선언 및 초기화가 가능하기도 하지만, 초기화 리스트를 사용하여 멤버 변수를 초기화하는 것이 일반적임
*class 내부에서 const int num;을 한 것은 메모리를 할당하는 것이 아니라 단순히 컴파일러에게 class가 어떤 형태인지 알린 것일 뿐
*따라서 class 내부에서는 const int num;과 같은 형태가 가능 => 이후 초기화 리스트로 실제 값 초기화
1-3) const 포인터 변수
a) const 위치가 맨 앞에 있으면서, 포인터 변수가 가리키는 값에 대하여 상수화
int num = 1;
const int* ptr = # // *ptr을 상수화
*ptr = 2; // Compile Error
num = 2; // Pass
**포인터를 통해 num의 value를 조작하는 것을 불가능하게 만든 것 (*ptr = 2는 컴파일에러)
**num 자체가 상수화된 것이 아님 (num=2;와 같은 수정 가능)
b) 포인터 변수 자체를 상수화
int num1 = 1;
int num2 = 2;
int* const ptr = &num1; // ptr을 상수화
ptr = &num2; // Compile Error
2. const 멤버 함수
비 멤버 함수를 상수화시킬 수는 없음
반드시 class 내부에서 정의된 멤버함수만 가능 !! → 실제 상수화되는 대상은 해당 class의 멤버 변수
의미: 해당 멤버 함수 내에서는 동일한 class의 모든 멤버 변수를 상수화시킨다 (멤버 함수의 local variable은 조작 가능, 상수화되지 않음)
int GetString(void) const; // Compile Error
class Foo
{
int num = 1;
int GetNum(void) const
{
int a = 1;
a++; // 지역 변수는 가능
num++; // Compile Error
return num;
}
};
초기화 리스트 개념 정리
'개발 > c++' 카테고리의 다른 글
[c++] new를 통한 동적 할당... 😯 (0) | 2023.09.26 |
---|---|
[c++] vector (0) | 2023.09.25 |
[c++] 서로 다른 & (참조자/주소반환) (0) | 2023.09.24 |
[c++] 동적 결합 (0) | 2023.09.11 |
[c++] virtual 통한 가상 메서드 선언, public 함수 다형 상속 (0) | 2023.09.10 |