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

前端之家收集整理的这篇文章主要介绍了c – 为什么使用派生类的基类指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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();
      }

 }

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

猜你在找的C&C++相关文章