假设以下情况(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 =" 函数是不可能的,因为每个函数的签名因类而异。
提前感谢您的任何建议。
更新
首先,关于 与我类似的建议问题 。 它没有回答我的问题。在那里我理解,如果我将派生类对象赋值给基类对象,基类中的 operator = 可能只是填充它"未触及",期间赋值,具有一些默认值的成员。
我在这里询问是否可以让编译器看到 - 这是我所指的派生类,而不是基础。我想以某种方式使赋值与派生类成员一起工作,而不是与基础成员一起工作。
我想我应该解释一下我的问题的目的。
我有一个类似的问题要解决。就上面的例子而言:我想创建一个指向混合类型对象的指针数组:Derived,Derived1,Derived12(每次创建一个新对象时,程序会检查它是否已经存在于数组中:如果是 - 新对象没有被添加,如果没有 - 新对象被分配给数组中的下一个未初始化对象。)我认为使用指向基类的指针数组将是解决方案,但后来遇到了这个问题。可能它不是最好的方法。