加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:01:21 所属栏目:百科 来源:网络整理
导读:我对C很新,但我遇到了一个似乎无法解决的问题. 我将使用汽车来说明问题,只是为了让事情变得更容易. 好的,我可以说我有一个基类Car,我有不同的品牌继承自该类.像这样: class Car{ public: Car();};class Ford: public Car{ public: Ford(); void drive(); vo
我对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 Fordn"; }
};

...

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读