假设我有三个类,一个抽象类,一个派生类和一个包含派生类的类。
class Parent {
public:
Parent();
void FunctionOne() { cout << "error"; }
void FunctionTwo() = 0;
}
class Child : public Parent {
public:
Child();
void FunctionOne() { cout << "implement function one" ;}
void FunctionTwo() { cout << "implement function two" ;}
}
class Execute{
public:
Execute(Parent& newparent) : parent(newparent) ;
Execute& operator=(const Execute& in) {
parent = in.parent;
Run() { parent.functionOne(); parent.functionTwo(); }
private:
Parent& parent;
}
当我创建我的对象 Execute 一切都很好。
Excecute execute( Child );
execute.run();
输出:“实现功能一”“实现功能二”
问题是当我将它添加到向量时,正在复制 Execute,即复制父级,但不是将子级复制到父级并使用多态性,而是父级正在复制一个抽象类,我的输出是“错误”并且我的程序崩溃.
vector<Execute> list;
list.push_back( Execute( Child ) );
list[0].run(); // ERROR
是否可以复制引用以便复制 Child 类?我需要切换到指针吗?问题是,由于正在复制 Execute,我没有一种简单的方法来管理删除指向 Child 的指针。我不能在这台机器上使用 Boost 或 shared_ptr<>。
我在我的帖子中添加了继承,很抱歉遗漏了它。我想我用 Execcute execute( Child ); 解决了这个问题。抱歉,我试图简化问题以使其易于理解,并且可能引入了一些细微的错误。你能帮我解决我原来的问题吗?