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

c – 为什么使用派生类的基类指针

发布时间:2020-12-16 03:11:31 所属栏目:百科 来源:网络整理
导读:class base{ ..... virtual void function1(); virtual void function2();};class derived::public base{ int function1(); int function2();};int main(){ derived d; base *b = d; int k = b-function1() // Why use this instead of the following line?
class base{
    .....
    virtual void function1();
    virtual void function2();
};

class derived::public base{
    int function1();
    int function2();
};

int main()
{
    derived d;
    base *b = &d;
    int k = b->function1() // Why use this instead of the following line?
    int k = d.function1(); // With this,the need for virtual functions is gone,right?

}

我不是CompSci工程师,我想知道这一点.为什么要使用虚拟函数,如果我们可以避免基类指针?

解决方法

多态性的力量在你的简单例子中并不是很明显,但是如果你把它扩展一些,可能会变得更清楚.
class vehicle{
      .....
      virtual int getEmission();
 }

 class car : public vehicle{
      int getEmission();
 }

 class bus : public vehicle{
      int getEmission();
 }

 int main()
 {
      car a;
      car b;
      car c;
      bus d;
      bus e;

      vehicle *traffic[]={&a,&b,&c,&d,&e};

      int totalEmission=0;

      for(int i=0;i<5;i++)
      {
          totalEmission+=traffic[i]->getEmission();
      }

 }

这使您可以遍历指针列表,并根据底层类型调用不同的方法.基本上,它可以让您编写代码,您无需知道编译时的子类型,但代码将执行正确的功能.

(编辑:李大同)

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

    推荐文章
      热点阅读