我必须编写一个程序,其中一个函数将通过抽象基类返回派生类,因此当返回到主类时可以访问派生类虚方法。
请记住,我不能更改主程序中的任何内容,因为它不是我编写的。
#include<iostream>
using namespace std;
class A
{
private:
public:
virtual void DoIt(void)=0;
A(void){};
~A(void){};
};
class B:
public A
{
private:
int Num;
public:
virtual void DoIt(void){Num=7;cout<<"its done";};
B(void){};
~B(void){};
};
A& returnValue(void)
{
B item;
return item;
}
void main()
{
A& item=returnValue();
item.DoIt();
}
当我尝试运行它时,最后一行打断了构建,说 DoIt
是一个纯虚函数调用。
有什么想法吗?
最佳答案
您正在返回对局部变量的引用,当 returnvalue
中的调用完成时,该变量将被销毁。请尝试以下操作:
A &returnValue(void) {
return *(new B);
}
int main() {
A& item = returnValue();
item.DoIt();
}
更好的解决方案是返回一个智能指针,让维护main函数的人负责returnvalue
返回的对象的生命周期:
#include <memory>
...
std::unique_ptr<A> returnValue(void) {
return std::unique_ptr<A>(new B);
}
int main() {
auto item = returnValue();
item->DoIt();
}
关于c++ - 通过其抽象基类的指针返回派生类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448893/