2012년 2월 23일 목요일
[C++] 연산자 오버로딩
OperatorOverLoad OperatorOverLoad::operator+( const OperatorOverLoad& rhw)
{
OperatorOverLoad temp;
temp.BindXY(m_nX + rhw.m_nX, m_nY + rhw.m_nY );
return temp;
}
위는 m_nX와 m_nY 두개의 멤버 변수를 가진 클래스에서의 '+' 연산자 오버로딩의 예시이다.
그런데 사실 이건 중요하지 않고ㅡ,.ㅡ;;
복사생성자 관련 포스트에서도 언급한것 같지만 '=' 연산자 오버로딩이 중요하다.
OperatorOverLoad OperatorOverLoad::operator=( const OperatorOverLoad& rhw)
{
///< 자기 자신 확인
if( this == &rhw )
{
return *this;
}
///< 확인
SetName(rhw.m_pName);
return *this;
}
void OperatorOverLoad::SetName(const char* pName)
{
///< 포인터 검사
if( pName != 0 )
{
int nLen = strlen(pName);
if( nLen != 0 )
{
delete [] m_pName;
m_pName = NULL;
m_pName = new char[nLen + 1];
strcpy_s(m_pName,nLen+1,pName);
}
}
}
위 내용을 요약하자면 char* 형의 멤버변수에 대하여 깊은 복사를 해주고 있다.
char* 형의 멤버변수가 존재할 경우 깊은 복사를 하도록 복사생성자와 '=' 연산자 오버로딩을 둘 다 생성해주어야 한다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기