'this함수'에 해당되는 글 1건

  1. 2009.05.14 const
[ Programming ]2009. 5. 14. 15:29
// 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;
}
Posted by 냉동