c++ - 运算符 = 在 C++ 中的虚拟继承中重载

标签 c++ oop operator-overloading base-class virtual-inheritance

假设我们有一个如下所示的层次结构。是不是一定要调用虚基类A的operator=方法?

class A
{ ... }

class B : virtual public A
{ ... }

class C : virtual public A
{ ... }

class D : public B, public C
{
   D& operator = (const D& other)
   {
      if(this != &other)
      {
       // A::operator = (other); is this line correct???
          B::operator = (other);
          C::operator = (other);
          ....
       }
      return *this;
    }
 }

最佳答案

正如评论中的@Emadpres 所述,这取决于 operator= 在层次结构中的处理方式。如果 B 和 C 使用 A 的 operator= 实现,则您不必在 D 的实现中显式使用它。

请记住,为了保持语义的直截了当,您可能应该在 B 和 C 中使用 A 的实现。在重载时尝试一直沿着层次结构树往上走是引入大量复杂性的好方法。

关于c++ - 运算符 = 在 C++ 中的虚拟继承中重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467144/

相关文章:

c++ - 为什么在editBox中使用SetSel和clear函数来写入文本

c++ - Qt 使用 isAutoRepeat() 处理 QPushButton Autorepeat() 行为

c++ - 下面程序中的整数溢出最大 int 1000 000(在 int 范围内)

c++ - 将 unique_ptr 的 vector 传递给对象。 vector 成为成员变量。正确的做法?

c# - 是否有在 C# 中重载赋值运算符的解决方法?

c++ - 重载 -> 运营商通过代理转发成员访问

c++ - 如何将 std::string 分配给我类(class)中的其他 std::string(overload = for string object)。如何加载 .ini 文件

c++ - 打印 int 指针的值

python - Django python - 类属性值是否在请求之间共享?

PHP:我是否将事件驱动编程与信号感知接口(interface)(信号和插槽/观察者模式)混为一谈?