конструктор копирования и оператор присваивания в наследнике
От: Аноним  
Дата: 26.02.13 08:41
Оценка:
Подскажите как правильно реализовывать

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()    //Вот это правильно? 
  {
     .....
  }
}


Зарание спасибо
Re: конструктор копирования и оператор присваивания в наследнике
От: saf_e  
Дата: 26.02.13 15:44
Оценка:
Здравствуйте, Аноним, Вы писали:

Не считая того что оператор присваивания лучше делать ч-з 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 и вызывать ее из конструктора копирования и оператора присваивания
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.