C++ 函数能否返回虚拟对象?

C++ 函数能否返回虚拟对象?,c++,function,inheritance,polymorphism,C++,Function,Inheritance,Polymorphism,我正在修改一个代码,将一个类a变成一个虚拟类,并添加两个类C和B作为派生类。 我有另一个类D,它最初有一个向量A作为成员。类D中的一个函数的返回类型为A。既然A现在是一个虚拟基类,我如何修改此函数,使其可以返回B或C 不能创建抽象类的实例,但可以创建指向抽象类的指针。所以,不要用a的向量,而是用指针的向量,或者更好的,智能指针指向a,如下所示: std::vector<std::unique_ptr<A>> vec; std::unique_ptr<A> F

我正在修改一个代码,将一个类a变成一个虚拟类,并添加两个类C和B作为派生类。
我有另一个类D,它最初有一个向量A作为成员。类D中的一个函数的返回类型为A。既然A现在是一个虚拟基类,我如何修改此函数,使其可以返回B或C

不能创建抽象类的实例,但可以创建指向抽象类的指针。所以,不要用a的向量,而是用指针的向量,或者更好的,智能指针指向a,如下所示:

std::vector<std::unique_ptr<A>> vec;
std::unique_ptr<A> FuncName(args);
您的函数声明应该如下所示:

std::vector<std::unique_ptr<A>> vec;
std::unique_ptr<A> FuncName(args);

您需要返回指向对象而不是实际对象的指针


我建议使用智能指针,如果使用最近的编译器。

< P> C++中的值有一种类型。

有多种方法实现多态,一个变量在C++中不使用指针,但它们很复杂。


简单的方法是让向量保持std::unique_ptr是一个值类型的草图,可以存储多个派生类型的过孔多边形。它仍然需要使用访问器来访问A接口,并且只是一个粗略的草图。我把它放在这里仅仅是为了说明问题可以解决:我不建议您使用这种技术,除非您已经证明这里存在性能瓶颈,并且您已经用尽了其他解决方案。

请发布您的代码,以便我们能够提供尽可能好的答案。如果你有一个向量,那么所有成员都是类型a,而不是派生类B、C或D。如果你只有一个返回a*的函数,你可以重载该函数来返回B*或C*。你不能改变函数的返回类型。它必须始终返回对a的引用,a可以是B或C的实例。然后,如果您想访问a中不存在的函数作为虚拟函数,则可以使用dynamic_cast。您可能的意思是不能创建抽象类的实例,没有虚拟类这样的东西。意思是说纯虚拟。谢谢。只有函数可以是纯虚拟的,这不适用于类。如果类包含纯虚函数声明,则称为抽象类。@πάνταῥεῖ, 谢谢你指出我的错误并帮助我改进我的答案,而不是投反对票。这更令人鼓舞,更有成效。你很幸运,今天是我的生日;-。。。不,说真的,我不会因为术语有点误用而对答案投反对票。