派生 class 上的 C++ 赋值运算符实现
C++ assignment operator implementation on derived class
假设我有一个基础 class,它看起来像这样:
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 class,并有一个名为 derivedMember 的新指针成员:
class Derived : public Base
{
public:
Derived():Base(){ derivedMember = new double( 10.1 ); }
Derived &operator=( const Derived &right )
{ /*some implementation */ }
private:
double *derivedMember;
};
我应该如何在 Derived class 上执行 operator= 实现,这样我就可以调用 base class operator= 并避免重写 Base class operator = 在 Derived class 上实现?简单来说,我怎样才能避免这样做:
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;
}
像这样:
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;
}
假设我有一个基础 class,它看起来像这样:
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 class,并有一个名为 derivedMember 的新指针成员:
class Derived : public Base
{
public:
Derived():Base(){ derivedMember = new double( 10.1 ); }
Derived &operator=( const Derived &right )
{ /*some implementation */ }
private:
double *derivedMember;
};
我应该如何在 Derived class 上执行 operator= 实现,这样我就可以调用 base class operator= 并避免重写 Base class operator = 在 Derived class 上实现?简单来说,我怎样才能避免这样做:
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;
}
像这样:
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;
}