【发布时间】:2020-02-27 17:17:43
【问题描述】:
我正在尝试仅使用基类指针制作派生类的副本。
如果我有:
class BaseClass; //Abstract class with =0 functions
class LeftClass : BaseClass;
class RightClass : BaseClass;
我有一个以 BaseClass 作为参数的函数:
void Function(BaseClass* baseClass)
我想复制 BaseClass,但我也想复制 LeftClass 的扩展功能 OR RightClass,但我不知道将哪个传递给函数 - 两者都可以.
所以我有这样的事情:
//global
vector<BaseClass*> myVector;
void Function(BaseClass* baseClass)
{
BaseClass* baseClassCopy = new BaseClass(baseClass);
myVector.push_back(baseClassCopy);
}
然后我用左或右类调用函数
int main()
{
LeftClass leftClass;
Function(&leftClass);
LeftClass* ResultOfCopy = myVector.at(0);
}
该代码不会复制整个 leftclass 作为副本,有没有办法做到这一点我忽略了?
另外BaseClass 是抽象的,其中一些功能是=0,所以我不能新建一个。否则在其他类中有复制功能可以使用。
【问题讨论】:
-
看起来你需要clone functionality
-
有没有办法在不修改任何类的情况下做到这一点?我是单元测试,所以我不应该更改任何代码...
-
哦,等等,我可能有一个解决方案。谢谢! :)
-
等等,如果 BaseClass 是抽象的,我不能“新建”一个新的呢?
-
@Sam 即使可以,它也会
new错误的课程。您从根本上需要向您的类添加一个clone方法(“虚拟复制构造函数”)以获得此功能,而不是像Nathan 的回答那样作弊(但实际上,不要那样做)。
标签: c++ inheritance copy