覆盖继承类中的赋值运算符

时间:2012-06-26 02:39:24

标签: c++ oop

class A
{
   int Avalue;
   A& operator=(A& copyMe)
   {
       Avalue = copyMe.Avalue;
       return *this;
   }
}

class B:public A
{
   int Bvalue;
   B& operator=(B& copyMe)
   {
       Bvalue = copyMe.Bvalue
       return *this;
   }
}

如何从B的赋值运算符调用A或基类赋值运算符?。如何从赋值运算符调用中处理A的返回引用。

3 个答案:

答案 0 :(得分:2)

所有操作符都可以被认为是一些聪明的函数,但这只是编译器的礼貌,它足够聪明地推断出给定的操作数是什么并将它们传递给你的覆盖。这是一种很好的可扩展方法,可以在有意义的情况下添加好的语法糖,但是由于它们通常的用法,人们不能真正看到它是有效的,但是当你观察到覆盖的定义时,它们看起来像功能并且表现得像功能。因此,只需使用范围运算符::即可访问A接口的公共部分。

A::operator=(copyMe)

请注意,您缺少多个分号,并且类默认为private访问权限。要访问A中的复制赋值运算符,您需要将其指定为public:

class A
{
  private:
   int Avalue;
  public:
   A& operator=(A& copyMe)
   {
       Avalue = copyMe.Avalue;
       return *this;
   }
}

答案 1 :(得分:1)

使用范围运算符显式调用赋值运算符(或任何其他函数):  A :: operator =(someval);

退房:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

答案 2 :(得分:0)

您只需在派生的op中添加A::operator=(copyMe)即可。此外,副本应为非const 引用。