返回一个子类作为其抽象父类 我正在编写C++中的控制台程序。假设我有一个抽象类Animal,实例类Dog和Cat从中继承

返回一个子类作为其抽象父类 我正在编写C++中的控制台程序。假设我有一个抽象类Animal,实例类Dog和Cat从中继承,c++,pointers,reference,return,abstract,C++,Pointers,Reference,Return,Abstract,然后我想创建一个向量,这样我就可以浏览我创建的所有动物列表,并使用它们的虚拟函数GetName(),该函数在子类中重载。直到这里一切都好 现在,我在main()中有一个名为createAnimal()的函数。我想让它能够返回指向父类的指针(或引用),无论是创建了Dog还是Cat。所以我想把它做成Animal*createAnimal(),但是出现了一个错误,告诉我“动物”:无法实例化抽象类。如何返回(以任何方式,指针,引用)一个子类作为其抽象父类 提前谢谢 您试图实现的功能被调用,但是您得到的错

然后我想创建一个
向量
,这样我就可以浏览我创建的所有动物列表,并使用它们的虚拟函数
GetName()
,该函数在子类中重载。直到这里一切都好

现在,我在
main()
中有一个名为
createAnimal()
的函数。我想让它能够返回指向父类的指针(或引用),无论是创建了
Dog
还是
Cat
。所以我想把它做成
Animal*createAnimal()
,但是出现了一个错误,告诉我“动物”:无法实例化抽象类。如何返回(以任何方式,指针,引用)一个子类作为其抽象父类


提前谢谢

您试图实现的功能被调用,但是您得到的错误消息意味着要么您不正确地实现了函数(比如
new Animal
,而您永远不应该实例化抽象基类本身,只实例化其子类),要么您不正确地使用了结果(比如
Animal=createAnimal()
?)

那么,您的代码是这样的吗

Animal *CreateAnimal(int type) {
    if(type == 1) return new Cat;
}

std::vector<Animal *> animalVector;

animalVector.push_back(CreateAnimal(1));
Animal*CreateAnimal(int类型){
如果(类型==1)返回新的Cat;
}
病媒动物传输器;
animalVector.向后推(CreateAnimal(1));
那么它应该会起作用

Animal *cat = new Cat();
Animal *dog = new Dog();
猫和狗是动物类的孩子

class Cat : public Animal{
}
Animal类应该将getName作为纯虚拟函数

 Class Animal {
 ...
 virtual std::string   getName() = 0;
 ...
 }
然后,您可以将Cat和Dog类作为动物类进行管理,并调用getName成员函数,不要忘记在Cat.cpp和Dog.cpp中重写此函数


我建议您阅读一些关于接口类(仅具有纯虚拟函数的类)的文档。

您可以展示
Animal*createAnimal()
?我还没有实现它。其思想是,根据用户输入或传递给它的参数,将出现一种切换情况,即创建不同类型的对象(Dog或Cat),然后作为父类传递。问题是我甚至不知道它应该具有哪种返回类型,但我想发送创建为父类的任何对象,因为它们的真实类型与我将要给它们的用途无关。听起来好像在某个地方你有一些东西看起来像动物a你可以有指向
动物的指针(
Animal*a;
)和对
动物的引用(
Animal*a=myDog;
),但不能是独立的
Animal
,只要它包含纯虚拟函数(
virtual const char*GetName()=0;
)。快速示例:嘿@VK_389;,谢谢你的回答,但我的问题实际上是如何将对象作为其父类返回。事实上,这就是我试图实现的目标!谢谢你给我介绍这个概念。我试图做的是
Animal*CreateAnimal(int-type){}
,其中有一个
returnnewcat(),函数调用的方式类似于
animalVector.push_back(CreateAnimal(1)),其中<代码>矢量animalVector。这是正确的方法吗?你引用的行-是的,请参阅我编辑的答案。