Bal*_*ran 21 c++ oop polymorphism virtual-functions base-class
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?
}
Run Code Online (Sandbox Code Playgroud)
我不是CompSci工程师,我想知道这一点.如果我们可以避免基类指针,为什么要使用虚函数?
小智 53
在你的简单例子中,多态性的力量并不明显,但如果你稍微扩展一下,它可能会变得更加清晰.
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();
      }
 }
Run Code Online (Sandbox Code Playgroud)
这使您可以遍历指针列表,并根据基础类型调用不同的方法.基本上,它允许您编写代码,在编译时不需要知道子类型是什么,但代码将执行正确的函数.