class A
{
public:
void func()
{
// ...................
}
};
void test(const A &a)
{
a.func();
}
위와 같이 있을 경우 과연 a.func() 를 호출 할 수 있을까? 컴파일 옵션으로 조정할 수 있지만, 원칙적으로 불가능하다.
그 이유는 a 라는 객체 자체가 const 이기 때문이다. const 객체는 그 객체의 내용이 변경/조작 되지 않는다는 것을
뜻한다. 즉 A class 의 func1 멤버함수가 내부적으로 어떤 코드가 들어 있는지 모르지만 만일 func() 에서 내부 데이터를 변경하는 코드가 있다면 결국
a.func() 는 더이상 a 라는 것을 상수적 즉 const 로 볼 수가 없기 때문이다.
그러나 func() 가 정말로 내부적인 데이터 변경을 가하지 않고 의미적으로 해당 객체의 상수적 성질을 유지해주는 함수라면 호출해도 된다. 이를 위하여 다음과 같이 만들면 된다.
class A
{
public:
void func() const
{
// ...................
}
};
즉 위의 func() 이라는 멤버함수는 그 호출이 있고 수행후 A 라는 클래스의 내부적 상수성을 유지 한다는 암묵적 지정이 된다.
프로그램 컴파일중에 몇자 적어 봤습니다....
감사 합니다.........
|
특히 객체의 안전성을 높이려는 측면에서 상당히 그 중요성이 강조됩니다.
그렇다고 C++에서 const에 대해서 상세하게 가르치는 경우는 별로 없습니다.
C언어에서 이미 다루었다고 보는 견해가 강하기 때문입니다.
제가 C++을 가르친다 해도 const에 대해서 상세하게는 못 가르칠것 같습니다.
그렇게 되면 덩달아서 C언어의 개념이 설명되어야 하는 경우가 많기 때문입니다.
따라서 C언어를 공부할때 덜렁 덜렁 아무책이나 가지고 공부하기 보다는 좋은 책을 구입해서 꼼꼼하게 보시는게 나중에 실력향상을 위해서 많은 도움이 된다고 봅니다.
그럼