赋值运算符和类继承

时间:2015-11-29 15:06:41

标签: c++ oop inheritance operator-overloading

假设以下情况(Dreaded Diamond):

实施例

   class Base //It's the Base class
{
    //...
    Base& operator=(const Base&); //Copy construct
    //...
};

class Derived1:virtual public Base
{
    //...
    Derived1& operator=(const Derived1&);
    //...
}

class Derived2:virtual public Base
{
    //...
    Derived2& operator=(const Derived2&);
    //...
}

class Derived12:public Derived1, public Derived2
{
    //...
    Derived12& operator=(const Derived12&);
    //...
}

示例:

//...
Base* object1 = new Derived12; 
Base* object2 = new Derived12;

*object1 = *object2;  //this line
//...

问题

当执行 "此行" 时, "运算符=" Base 中的功能。

然而我寻求的结果不是这个。我希望应用赋值运算符是 Derived12 类中指定的运算符。 我了解overloading " operator =" 函数是不可能的,因为每个函数的签名因类而异。

问题

  1. 有没有办法让编译器理解我想要应用的赋值函数是什么?
  2. 如果操作员无法进行重载,可以提出其他方式吗?
  3. 提前感谢您的任何建议。

    更新

    首先,关于 与我类似的建议问题 它没有回答我的问题。在那里我理解,如果我将派生类对象赋值给基类对象,基类中的 operator = 可能只是填充它"未触及",期间赋值,具有一些默认值的成员。

    我在这里询问是否可以让编译器看到 - 这是我所指的派生类,而不是基础。我想以某种方式使赋值与派生类成员一起工作,而不是与基础成员一起工作。

    我想我应该解释一下我的问题的目的。

    我有一个类似的问题要解决。就上面的例子而言:我想创建一个指向混合类型对象的指针数组:Derived,Derived1,Derived12(每次创建一个新对象时,程序会检查它是否已经存在于数组中:如果是 - 新对象没有被添加,如果没有 - 新对象被分配给数组中的下一个未初始化对象。)我认为使用指向基类的指针数组将是解决方案,但后来遇到了这个问题。可能它不是最好的方法。

0 个答案:

没有答案