虚函数有什么作用啊?和多态性有什么关系?

来源:百度知道 编辑:UC知道 时间:2024/05/28 01:50:25
最近学面向对象时有点模糊,虚函数做什么用的?另外OOP,MDA,DDA是具体那些思想啊,谁能解决我的迷惑啊?谢谢了 ?

虚函数最大的好处是可以保持驱动程序的变量数据在增加派生类后可以不发生修改,已经统一程序接口,如:
1.
class B
{
public:
virtual void Run()=0;
};
class A : public B
{
public:
virtual void Run(){ cout<<"run A"<<endl; }
};
class C: public B
{
public:
virtual void Run(){ cout<<"run B"<<endl; }
};
现在有一个驱动模块,如类 Drv
class Drv
{
public:
void Execute()
{
b->Run();
}
private:
B *b;
};
即使以后派生类扩展了,这个驱动程序的数据程序,已经主要函数基本不做修改,使得出错率降低。如果不用虚函数,可能的代码为:
class Drv
{
public:
void Execute()
{
switch(a)
{
case 0: a.Run(); break;
case 1: c.Run(); break;
//以后可能还要增加其它派生类对象
}

}
private:
int sel
A a;
B b;
//以后可能还要增加其它派生类对象
};
显然每增加一个派生类,就要对上面做多处修改!!!
2. 通用接口,如:
void Execute(B &b)
{
b.Run();