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

最近学面向对象时有点模糊,虚函数做什么用的?另外OOP,MDA,DDA是具体那些思想啊,谁能解决我的迷惑啊?谢谢了?... 最近学面向对象时有点模糊,虚函数做什么用的?另外OOP,MDA,DDA是具体那些思想啊,谁能解决我的迷惑啊?谢谢了 ? 展开
 我来答
fengjian_net
推荐于2016-07-16 · TA获得超过2866个赞
知道大有可为答主
回答量:1799
采纳率:50%
帮助的人:2520万
展开全部
虚函数最大的好处是可以保持驱动程序的变量数据在增加派生类后可以不发生修改,已经统一程序接口,如:
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();
}
这样可以使用如:
A a;
Execute(a);
C c;
Execute(c);
使得程序降低,否则需要定义给每个类为参数的函数,如:
void Execute(A &a)
{
a.Run();
}

void Execute(C &c)
{
c.Run();
}
上面的两个例子可以看到虚函数的好处!!
百度网友781d90355
2007-01-05 · 超过21用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:70.6万
展开全部
虚函数提供了一种面向对象的机制可以让继承类重写其中方法,虚函数有方法体。以提供灵活的机制让继承类实现自己的函数方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
coolslob
2007-01-05 · 超过11用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:35.6万
展开全部
虚函数可以被重载(override)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
m3329
2007-01-05 · TA获得超过102个赞
知道答主
回答量:124
采纳率:0%
帮助的人:0
展开全部
a virtual function will be binded only at run time, not in compile stage.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式