c++中的虚函数是什么东西?

 我来答
小杰知音
推荐于2018-04-27 · TA获得超过2.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1326万
展开全部
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。下面来看一段简单的代码
class A{
public:
void print(){ cout<<”This is A”<<endl;}
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;}
};
int main(){ //为了在以后便于区分,我这段main()代码叫做main1
A a;
B b;
a.print();
b.print();
}
通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。那现在就把main()处的代码改一改。
int main(){ //main2
A a;
B b;
A* p1=&a;
A* p2=&b;
p1->print();
p2->print();
}
运行一下看看结果,结果却是两个This is A。问题来了,p2明明指向的是class B的对象但却是调用的class A的print()函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数
class A{
public:
virtual void print(){ cout<<”This is A”<<endl;}//现在成了虚函数了
};
class B:public A{
public:
void print(){ cout<<”This is B”<<endl;}//这里需要在前面加上关键字virtual吗?
};
毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。
现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。
现在来消化一下,我作个简单的总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
slatop
推荐于2017-09-26 · TA获得超过1390个赞
知道小有建树答主
回答量:381
采纳率:100%
帮助的人:427万
展开全部
在类中使用关键词virtual修饰的为虚函数,如
class ob
{
virtual void func(){;}
}
虚函数的主要作用是在派生类与基础之间产生多态性.通俗一点讲.一个类的函数被说明为虚函数,然后他派生下去的类继承过来的这个函数也同时默认为虚函数,当使用一个基类的指针指向一个子类的对象地,那么使用该指针调用的函数将会是所指向对象的函数.举例
class ob1
{
virtual int func(){return 1;}
}
class ob2:public ob1
{
int func(){return 2;}
}
ob2派生自ob1.ob1有一个func的虚函数.ob2同时继承了这个函数.并且改写了它.ob2中的func函数自动成为虚函数.此时我们使用
ob1 *P=new ob2; 使用了一个ob1的指针指向的是ob2的对象.这时p->func;所调用的是ob2的func函数,

注意:一般情况下我们会在这种派生中将基类的析构函数也说明为虚函数如
virtual ~ob1(){;}
这样,他派生的子类的析构函数同时默认为虚析构函数.这样在删除一个指向子类的对象的基类指针时,就会调用指针所指向的类的析构函数.如
delete p;删除的是基类指针,但是p指向的是子类ob2所以虚函数正常的引导先调用子类ob2的析构函数.
另外:构造函数是不能被说明为虚函数的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qwe435502161
2011-12-27
知道答主
回答量:24
采纳率:0%
帮助的人:4万
展开全部
baidu\\\\一下你就知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
薄薄的一片云
2011-12-27
知道答主
回答量:15
采纳率:0%
帮助的人:4.8万
展开全部
百度百科上有篇文章写的不错,你可以去看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式