디폴트 대입연산자를 사용하지 않고 직접 코딩 한다면 우측 연관 연산을 고려하여 자기자신의 참조자를 반환하도록 하자. 또한 자기 대입에 대한 처리도 하자.
우측연관 연산의 예
x = y = z = 15;
자기 대입에 대한 예
x = x;
, a[i] = a[j];
class Widget{
Widget(const Widget& rhs);
Widget& operator=(const Widget& rhs);
}
Widget& Widget::operator=(const Widget& rhs)
{
Widget temp (rhs); // 자기 대입에 대한 처리
swap(temp); // 자기 대입에 대한 처리
return *this; //우측연관 연산 처리
}
복사생성자와 대입연산자를 코딩할때는 모든 맴버를 복사하도록 하자
class Customer{
Customer(const Customer& rhs);
Customer& operator=(const Customer& rhs);
private:
sting str;
Data data;
}
str,data도 반드시 복사 하도록 하자.
class ACustomer : Customer{
Customer(const Customer& rhs) : Customer(rhs)
{
.....
}
Customer& operator=(const Customer& rhs)
{
Customer::operator=(rhs);
}
}
위와 같이 베이스 클래스의 생성자와 대입연산자를 호출하여, 베이스 클래스의 복사도 해주자.
0 개의 댓글:
댓글 쓰기