class SoSimple
{
private:
int num;
public:
SoSimple(int n) : num(n)
{
}
SoSimple &AddNum(int n)
{
num += n;
return *this;
}
void SimpleFunc()
{
cout << "SimpleFunc: " << num << endl;
}
void SimpleFunc() const
{
cout << "const SimpleFunc: " << num << endl;
}
//참조자로 obj가 선언됬으므로 SoSimple의 무슨 객체든 인자로 받을 수 있음.
void YourFunc(const SoSimple &obj)
{
obj.SimpleFunc();
}
int main(void)
{
// void SimpleFunc 실행
SoSimple obj1(2);
// void SimpleFunc() const 실행
const SoSimple obj2(7);
//void SimpleFunc() 실행
obj1.SimpleFunc();
// void SimpleFunc() const 실행
obj2.SimpleFunc();
YourFunc(obj1);
YourFunc(obj2);
return 0;
}
}
const 객체를 대상으로 멤버 함수를 오출하면 const 멤버 함수가 호출되며 일반 객체를 대상으로 함수 호출하면 일반 멤버함수가 호출된다.
void YourFunc(const SoSimple &obj) 와 같이 const 참조자로 매게변수를 받으므로 참조자를 이용한 obj.SimpleFunc(); 수행시 void SimpleFunc() const가 실행된다.