返回一个子类作为其抽象父类

时间:2018-11-22 19:13:37

标签: c++ pointers reference return abstract

我正在用C ++编写一个控制台程序。假设我有一个抽象类Animal,可实例化类DogCat从中继承。

然后,我想创建一个vector<Animal*>,以便可以浏览我创建的动物的整个列表并使用它们的虚函数GetName(),该虚函数在子类中已重载。到这里为止一切正常。

现在,我在main()中拥有名为createAnimal()的此功能。我想以一种无论创建Dog还是Cat都可以返回指向父类的指针(或引用)的方式来实现它。所以我想像Animal* createAnimal()那样做,但是出现一个错误告诉我 'Animal':无法实例化抽象类 。如何返回(以任何方式,指针,引用)子类作为其抽象父类?

谢谢!

2 个答案:

答案 0 :(得分:1)

您要实现的目标称为an object factory,但是收到的错误消息表示您未正确实现该功能(类似于new Animal,而您从不实例化摘要基类本身(仅其子类),或者您使用的结果不正确(例如Animal animal = createAnimal()?)

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

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

std::vector<Animal *> animalVector;

animalVector.push_back(CreateAnimal(1));

然后它应该工作。

答案 1 :(得分:1)

Animal *cat = new Cat();
Animal *dog = new Dog();

“猫”和“狗”是动物类的孩子

class Cat : public Animal{
}

动物类应将getName作为纯虚函数

 Class Animal {
 ...
 virtual std::string   getName() = 0;
 ...
 }

然后,您可以将Cat和Dog类作为Animal类进行管理,并调用getName成员函数,不要忘记在Cat.cpp和Dog.cpp中覆盖此函数

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