C从基类实例调用派生函数

我对C很新,但我遇到了一个似乎无法解决的问题.
我将使用汽车来说明问题,只是为了让事情变得更容易.
好的,我可以说我有一个基类Car,我有不同的品牌继承自该类.像这样:
class Car
{
    public:
       Car();
};

class Ford: public Car
{
    public:
        Ford();
        void drive();
        void park();
};

整个想法是将所有这些不同的汽车放在一起,形成一个Car类型的矢量.像这样:

vector<Car*> cars;
cars.push_back(new Ford());
cars.back()->drive(); //this won't work

如何在基类实例调用派生函数?请注意,我想将这些全部放在一个向量中.这背后的原因是因为我只想使用已经添加的最后一个派生汽车类实例.(在这种情况下,派生汽车类是福特).另请注意,所有车型都具有相同的功能.

解决方法

如果这些函数对所有派生类都是通用的,那么你有一个通用的接口,所以你应该通过基类来表达它.为此,您将这些函数声明为pure-virtual:
class Car {
public:
    virtual void drive() = 0;  // Pure-virtual function
};

class Ford : public Car {
public:
    virtual void drive() { std::cout << "driving Ford\n"; }
};

...

vector<Car*> cars;
cars.push_back(new Ford());
cars.back()->drive(); //this will work

[侧面说明,通常认为使用原始指针向量的做法很差,因为它会使内存管理变得棘手.你应该考虑使用智能指针.]

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...