我对C很新,但我遇到了一个似乎无法解决的问题.
我将使用汽车来说明问题,只是为了让事情变得更容易.
好的,我可以说我有一个基类Car,我有不同的品牌继承自该类.像这样:
我将使用汽车来说明问题,只是为了让事情变得更容易.
好的,我可以说我有一个基类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
[侧面说明,通常认为使用原始指针向量的做法很差,因为它会使内存管理变得棘手.你应该考虑使用智能指针.]