如何在子类的向量上应用多态函数

汤姆

在使用c ++和多态性时遇到麻烦。我意识到这是一个非常简单的问题,但是我真的在为从Java到c ++的迁移而苦苦挣扎,尤其是在指针方面。

我有一个“玩具”类,并且从中继承了“娃娃”和“汽车”类。在每个类中,我都有一个名为printToy()的函数;我有一个可容纳娃娃,玩具和汽车对象的向量。我想遍历在每个索引处调用“ printToy()”的向量,但是当我这样做时,它调用了Toy类的方法,从而为我提供了“ Toy Toy Toy”而不是“ Toy Doll Car”的输出。感谢任何可以帮助我的人!

这是示例:

class Toy{
    public:
    void printToy(){
        std::cout<<"Toy"<<std::endl;
    }
};

class Doll: public Toy{
    public:
    void printToy(){
        std::cout << "Doll" << std::endl;
    }
};

class Car: public Toy{
    public:
    void printToy(){
        std::cout << "Car" << std::endl;
    }
};


int main(){
    std::vector<Toy> toys;

    Toy toy;
    Doll doll;
    Car car;

    toys.push_back(toy);
    toys.push_back(doll);
    toys.push_back(car);

    for(int i = 0; i < toys.size(); i++){
        toys[i].printToy();
    }

    return 0;
}
如果

首先,您的printToy功能应为virtual否则,将不涉及多态性。(感谢发表评论!)

向量存储Toys,而仅存储Toy不涉及多态性。为了使用运行时多态性,必须存储指针等(unique_ptrs,reference_wrappera等)而不是普通对象。像这样:

std::vector<Toy*> toys;
toys.emplace_back(&car);
toys.emplace_back(&doll);

for (auto& toy : toys)
    toy->printToy();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章