我有一个继承层次结构:class1和class2继承自抽象类abstractClass。在我的主程序中,我创建了以下句柄:
abstractClass * myPointer = new class1(parameter1);
myPointer也可以指向class2对象。我将使用myPointer进行多态调用。 现在我有另一个使用合成的类(我们说class3),它有一个成员,它是一个指向abstractClass的指针。即:
class class3
{
private:
abstractClass *ptr;
};
我希望能做到:
abstractClass * myPointer = new class1(parameter1);
class3 *myObject=new class3(myPointer);
像这样,类class3有一个指针,用于进行多态调用。
问题是我必须做一个深层复制,即在class3的构造函数中做得不好:
abstractClass * myPointer = new class1(parameter1);
class3 *myObject=new class3(myPointer);
class3::class3(abstractClass *pointer)
{
ptr = pointer; //ptr is the member of the class
}
我必须做一份深刻的副本。我无法写
ptr = new Class1(.....)
or
ptr = new Class2()
因为我不知道从abstractClass *指针指向的对象类型。我能怎么做? (可能我必须使用downcast和if来理解对象的类型。但是有更优雅的解决方案吗?)
我使用g ++ -std = gnu ++ 11编译器
提前致谢