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

Dan*_*Dan 8 c++ function vector derived-class

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

class Car
{
    public:
       Car();
};

class Ford: public Car
{
    public:
        Ford();
        void drive();
        void park();
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

Oli*_*rth 7

如果这些功能真的通用于所有的派生类,那么你有一个通用的接口,所以你应该通过基类表达这一点.为此,您将这些函数声明为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
Run Code Online (Sandbox Code Playgroud)

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