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