博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++的虚函数
阅读量:6992 次
发布时间:2019-06-27

本文共 917 字,大约阅读时间需要 3 分钟。

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://www.cnblogs.com/Manual-Linux/p/9779221.html

你可能感兴趣的文章
scrapy初体验 - 安装遇到的坑及第一个范例
查看>>
OC内存管理
查看>>
C#中Split用法
查看>>
3月6日 c#语言
查看>>
[LeetCode] Surrounded Regions, Solution
查看>>
MySQL系列:数据库基本操作(1)
查看>>
hdu1058(dp)
查看>>
android EditText与TextView几个常用的属性
查看>>
SDN第五次上机作业
查看>>
课堂练习
查看>>
Git 工具 - 储藏(Stashing)
查看>>
越狱(快速幂)
查看>>
联合查询的 SQL 语法
查看>>
Python语法
查看>>
服务器使用bbr加速配置
查看>>
Hadoop综合大作业
查看>>
JAVA 消耗 CPU过高排查方法
查看>>
DOM和BOM
查看>>
prometheus监控示例
查看>>
细菌的繁殖
查看>>