码迷,mamicode.com
首页 > 编程语言 > 详细

C++的虚函数

时间:2018-10-13 02:48:44      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:nbsp   void   函数   静态函数   sdn   col   函数依赖   log   int   

1 多态产生的背景
?希望同一个方法在派生类和基类中的行为是不同的,换句话来说,方法的行为取决于调用该方法的对象。
2 解决多态的两种方法
?1)在派生类中重新定义基类的方法
?2)使用虚方法
3 虚函数的定义
?拥有 Virtual 关键字的函数称之为虚函数

virtual void Click(int id, int row, int col);

?经常在基类中将派生类会重新定义的方法声明为虚方法,方法在基类中被声明为虚的后,它在派生类中将自动成为虚方法。然而,在派生类声明中使用关键字virtual 来指出那些函数是虚函数也不失为一个好方法。
4 为何需要虚析构函数
?《C++ Primer Plus(第六版)》P501
5 有哪些函数可以成为虚函数?那些函数不可以成为虚函数?
?要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。

?所以呢,这些函数不能成为虚函数;

?1.内联函数:我们都知道内联函数只是在函数调用点将其展开,它不能产生函数符号,所以不能往虚表中存放,自然就不能成为虚函数。

?2.静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。

?3.构造函数:都知道只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生    成。更别说用对象去调用了。所以构造函数不能成为虚函数。

?那些函数可以成为虚函数呢?

?普通的成员方法是可以成为虚函数的

?还有析构函数,因为析构函数是为了释放对象的,所以之前我们的对象已经生成,而且析构函数可以取地址,所以可以成为虚函数。

参考资料
《C++ Primer Plus(第六版)》
https://blog.csdn.net/LC98123456/article/details/81143102 作者:我爱橙

C++的虚函数

标签:nbsp   void   函数   静态函数   sdn   col   函数依赖   log   int   

原文地址:https://www.cnblogs.com/Manual-Linux/p/9779221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!