오늘 수업 들은것.... 근데 뭔가 글쓰기는 귀찮아서 주석으로 대체한다. (주석적다가 일부분 수업 놓침 망함티비)
#include <iostream>
class ConstTest
{
public:
const int a = 0;
int b = 0;
ConstTest() {}
~ConstTest() {}
void Addnum()
{
b++;
}
int GetNum() const
{
return b;
}
void Show() const
{
std::cout << a << " " << b << '\n';
}
};
int main()
{
const ConstTest* a = new ConstTest(); // const객체 선언. 객체의 멤버를 바꾸지 않겠다!
ConstTest* const b = new ConstTest(); // non-const객체 선언. 객체의 멤버를 바꿀 수 있다. but b포인터의 주소는 바꿀 수 없다.
a->b += 1; // 에러. const객체는 멤버를 변경할 수 없다.
b->b += 1; // 가능.
a->Addnum(); // 에러. const객체는 const함수만 호출 가능.
b->Addnum(); // 가능.
a->GetNum() = 1; // const함수기 때문에 반환 값을 바꿀 수 없다.
b->GetNum() = 1; // 위와 동일
a->Show(); // 가능. const객체는 const함수는 호출할 수 있기 때문.
b->Show(); // 가능.
a = b; // 가능. 주소는 바꿀 수 있다. 멤버만 못바꿈.
b = a; // 불가능. 포인터를 const화 시켰기 때문에 주소를 바꿀 수 없다.
delete a;
delete b;
a = new ConstTest(); // 가능
b = new ConstTest(); // 에러. const변수는 선언과 동시에 초기화 되어야 하기 때문
}
알아서들 이해하셨길....
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 중첩 클래스를 알아보자.araboza (0) | 2024.06.12 |
---|---|
[C++] friend에 대해 알아보자.araboza (0) | 2024.06.12 |
[C++] static, 근데 class를 곁들인 (0) | 2024.06.11 |
[C++] 헤더를 미리 컴파일 하는 방법 (0) | 2024.04.11 |
[C++] sprintf_s()를 사용해 실수와 정수를 문자열에 담기 (0) | 2024.04.08 |