// test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
class CTest
{
private:
int m_Data;
public:
CTest() : m_Data(0)
{
}
explicit CTest(int data) : m_Data(data)
{
}
int const GetData() const
{
return m_Data;
}
CTest operator+ (const CTest& rhs) /*const*/
{
return CTest( this->m_Data + rhs.GetData() );
}
CTest operator- (const CTest& rhs) /*const*/
{
return CTest( this->m_Data - rhs.GetData() );
}
};
int _tmain(int argc, _TCHAR* argv[])
{
const int a = 10;
const int b = 20;
int c = a + b;
int d = a - b;
std::cout << "a+b = " << c << std::endl;
std::cout << "a-b = " << d << std::endl;
std::cout <<"-----------------" << std::endl;
const CTest DataA(10);
const CTest DataB(20);
/// 클래스의 operator+ operator- const를 주석 처리 하면 에러.
CTest DataC = DataA + DataB;
CTest DataD = DataA - DataB;
/*
멤버 함수를 호출할 때 숨겨진 this가 전달 된다.
ex> CTest::func() 일때 this는 CTest* 이고
CTest::func() const 일때 this는 CTest const* 이다.
즉, 위에서 DataA가 const이기 때문에 operator+()의 this로 const &DataA
즉, CTest const * 전달.
그래서 함수에 const를 붙여야 한다.
*/
std::cout << "a+b = " << DataC.GetData() << std::endl;
std::cout << "a-b = " << DataD.GetData() << std::endl;
return 0;
}