1
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 的返回引用。

4

3 回答 3

2

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

A::operator=(copyMe)

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

class A
{
  private:
   int Avalue;
  public:
   A& operator=(A& copyMe)
   {
       Avalue = copyMe.Avalue;
       return *this;
   }
}
于 2012-06-26T03:00:13.157 回答
1

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

查看:http ://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

于 2012-06-26T02:47:45.130 回答
0

您只需要添加A::operator=(copyMe)派生的操作。此外,副本应该是非常量引用。

于 2012-06-26T02:43:53.123 回答