Подскажите как правильно реализовывать
class A
{
public:
A& operator= (const A& a){}
A(const A& a){}
}
class B
{
public:
B& operator= (const B& b)
{
A::operator= (b); //Вот это правильно?
....
}
B(const B& b) : A() //Вот это правильно?
{
.....
}
}
Зарание спасибо
Здравствуйте, Аноним, Вы писали:
Не считая того что оператор присваивания лучше делать ч-з swap, то можно и так. Ну и не забываем вызывать конструктор копирования базового класса:
А>А>class B
А>{
А> public:
А> B& operator= (const B& b)
А> {
А> A::operator= (b); // можно и так
// но лучше так:
B tmp(b);
swap(tmp);
А> ....
А> }
А> B(const B& b) : A(b) // так правильно
А> {
А> .....
А> }
void swap(B &b)
{
// Здесь вся магия копирования
}
А>}
А>
Ну а если вас не заботит состояние базового класса в случае возникновения исключений, то можно создать ф-цию private_copy и вызывать ее из конструктора копирования и оператора присваивания