派生赋值运算符从基类调用它

时间:2013-03-14 20:04:05

标签: c++ inheritance operator-overloading assignment-operator

In the best rated answer to the question from this link,我不明白派生赋值运算符如何从基类调用赋值运算符,即这部分代码:

Derived& operator=(const Derived& d)
{
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
}

是什么

Base::operator=(d)

意思?它有什么作用?干杯!

2 个答案:

答案 0 :(得分:4)

Base::operator=调用Baseoperator=来复制属于Base的对象部分,然后派生类复制其余部分。由于基类已经完成了所有正确的工作,为什么要重复工作,只需重用。让我们来看看这个简化的例子:

class Base
{
   std::string
      s1 ;
   int
      i1 ;
   public:
     Base& operator =( const Base& b)  // method #1
     {
        // trvial probably not good practice example
        s1 = b.s1 ;
        i1 = b.i1 ;

        return *this ;
     }
} ;

class Derived : Base
{
   double
     d1 ;
   public:
     Derived& operator =(const Derived& d ) // method #2
     {
       // trvial probably not good practice example
       Base::operator=(d) ;
       d1 = d.d1 ;
       return *this ;

     }

} ;

Derived将有三个成员变量,其中两个来自Bases1i1,其中一个是d1。因此Base::operator=调用我标记为method #1的内容,该Derived复制了Bases1继承的i1d1等两个变量所有剩下要复制的内容都是method #2,这是{{1}}照顾的内容。

答案 1 :(得分:1)

这只是对当前对象的成员函数的调用。当前对象继承了一个完全限定名称为Base::operator=的函数,您可以像调用任何其他非静态成员函数一样调用它。