티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
C언어와 달리 C++에서는 const와 관련해서 참으로 할 말이 많다고 이 책의 저자는 말합니다. 이번에는 const와 관련해서 보충 내용을 담는 것으로 시작합니다.
객체 상수화
다음과 같이 변수를 상수화하듯이
const int num = 10;
다음과 같이 객체도 상수화할 수 있습니다.
const Simple sim(20);
그리고 이렇게 객체에 const 선언이 붙게 되면, 객체의 데이터 변경을 허용하지 않게 됩니다. 따라서 이 객체를 대상으로는 const 멤버 함수만 호출이 가능합니다.
const 유무에 따른 함수 오버로딩
함수의 오버로딩이 성립하려면 매개변수의 자료형이나 개수가 달라야 함을 알고 있을 것입니다. 그런데 이에 더해서 const의 유무도 함수 오버로딩의 조건에 해당합니다. 다음 예제를 살펴보겠습니다.
#include <iostream>
using namespace std;
class Simple
{
private:
int num;
public:
Simple(int n) : num(n) {}
Simple& AddNum(int n)
{
num += n;
return *this;
}
void SimpleFunc()
{
cout << "SimpleFunc : " << num << endl;
}
void SimpleFunc() const
{
cout << "const SimpleFunc : " << num << endl;
}
}
void YourFunc(const Simple &obj)
{
obj.SimpleFunc();
}
int main(void)
{
Simple obj1(2);
const Simple obj2(7);
obj1.SimpleFunc();
obj2.SimpleFunc();
YourFunc(obj1);
YourFunc(obj2);
return 0;
}
/*
실행결과
SimpleFunc : 2
constSimpleFunc : 7
constSimpleFunc : 2
constSimpleFunc : 7
*/
위 예제를 보아 const의 유무로 함수가 오버로딩되었을 때, 객체가 const가 아니면 const가 아닌 함수, const면 const함수를 호출하는 것으로 보입니다. obj1은 const 객체가 아니지만 YourFunc에 인자로 줄 때 이를 const로 받기 때문에 이 함수 내에서 SimpleFunc을 호출했을 때 obj1도 const 함수를 호출했습니다.
'공부 일지 > CPP 공부 일지' 카테고리의 다른 글
C++ | static과 클래스 (0) | 2021.08.02 |
---|---|
C++ | 클래스와 함수에 대한 friend 선언 (0) | 2021.08.02 |
C++ | 복사 생성자와 explicit 키워드 (0) | 2021.08.02 |
C++ | 클래스와 배열 그리고 this 포인터 (0) | 2021.08.02 |
C++ | 생성자(Constructor)와 소멸자(Destructor) (0) | 2021.08.02 |