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)
这使您可以遍历指针列表,并根据基础类型调用不同的方法.基本上,它允许您编写代码,在编译时不需要知道子类型是什么,但代码将执行正确的函数.
| 归档时间: |
|
| 查看次数: |
18581 次 |
| 最近记录: |