派生类

时间:2015-10-28 18:44:17

标签: c++ inheritance operator-overloading

假设我有一个基类,如下所示:

class Base
{
public:
   Base(){ baseMember = new int( 10 ); }

   Base &operator=( const Base &right )
   {
      baseMember = new int( *(right.baseMember) );
      return *this;
   }
protected:
   int *baseMember;
};

现在我想要一个继承自Base的Derived类,并且有一个名为derivedMember的新指针成员:

class Derived : public Base
{
public:
   Derived():Base(){ derivedMember = new double( 10.1 ); }

   Derived &operator=( const Derived &right )
   { /*some implementation */ }
private:
   double *derivedMember;
};

我应该如何在Derived类上执行operator =实现,我可以调用基类operator =并避免在Derived类上重写Base类operator = implementation?简单来说,我怎么能避免这样做:

Derived &operator=(const Derived &right )
{
   baseMember = new int( *(right.baseMember) ); //this is what I want to avoid rewriting
   derivedMember = new double( *(right.derivedMember) );
   return *this;
}

1 个答案:

答案 0 :(得分:1)

像这样:

Derived &operator=(const Derived &right )
{
    if (&right == this) { return *this; } // prevent assigning to self
    Base::operator=(right);
    delete derivedMember; // remember to release any assigned memory (assumes derivedMember is assigned a default of nullPtr)
    derivedMember = new double( *(right.derivedMember) );
    return *this;
}
相关问题