重写子类中的赋值操作符

class   Base   { 
public: 
Base(int   initialValue   =   0):   x(initialValue)   {} 
private: 
int   x; 

class   Derived:   public   Base   { 
public: 
Derived(int   initialValue) 
:   Base(initialValue),   y(initialValue)   {} 
Derived&   operator=(const   Derived&   rhs); 
private: 
int   y; 
}; 

Derived&   Derived::operator=(const   Derived&   rhs) 

if   (this   ==   &rhs)   return   *this; 
Base::operator=(rhs);   //   调用this-> Base::operator= 
y   =   rhs.y; 
return   *this;

}

 

这里只是显式地调用了Base::operator=,这个调用和一般情况下的在成员 
函数中调用另外的成员函数一样,以*this   作为它的隐式左值。Base::operator= 
将针对*this   的Base   部分执行它所有该做的工作——正如你所想得到的那种效 
果。 
但如果基类赋值运算符是编译器生成的,有些编译器会拒绝这种对于基类 
赋值运算符的调用(见条款45)。为了适应这种编译器,必须这样实现 
Derived::operator=: 
Derived&   Derived::operator=(const   Derived&   rhs) 

if   (this   ==   &rhs)   return   *this; 
static_cast <Base&> (*this)   =   rhs;   //   对*this   的Base   部分 
//   调用operator= 
y   =   rhs.y; 
return   *this; 

};

你可能感兴趣的:(重写子类中的赋值操作符)