【发布时间】:2019-04-25 11:45:46
【问题描述】:
我正在用 C++ 编写控制台程序。假设我有抽象类Animal,可实例化类Dog 和Cat 继承自该抽象类。
然后我想创建一个vector<Animal*>,这样我就可以浏览我创建的整个动物列表并使用它们的虚函数GetName(),它在子类中被重载。到这里一切正常。
现在,我在main() 中有这个函数,称为createAnimal()。我想以这样一种方式使它可以返回指向父类的指针(或引用),无论是否创建了 Dog 或 Cat。所以我想让它像Animal* createAnimal(),但随后出现一个错误,告诉我'Animal':无法实例化抽象类。如何返回(以任何方式、指针、引用)子类作为其抽象父类?
提前致谢!
【问题讨论】:
-
你能显示
Animal* createAnimal()吗? -
我还没有实现。这个想法是,根据用户输入或传递给它的参数,将创建一个不同类型的对象(狗或猫),然后作为父类传递。
-
问题是我什至不知道它应该具有哪种返回类型,但我想发送任何作为父类创建的对象,因为它们的真实类型对于使用我要给他们的。
-
听起来在某个地方你有一些看起来像
Animal a;的东西你可以有指向Animal(Animal *a;) 的指针和对Animal(Animal *a = myDog;) 的引用,但不是一个立场单独Animal,只要它包含纯虚函数(virtual const char * GetName() = 0;)。快速示例:ideone.com/NiqtkP
标签: c++ pointers reference return abstract