C++函数的重载,覆盖和隐藏(——高质量编程第14章)
函数重载概念
只有C++才有重载的概念,C语言没有。
靠行参列表的不同来区别不同的重载函数,
若是全局函数和成员函数同名时,不算重载,因为它们的作用域不同,所以成员函数会将全局函数给隐藏(遮蔽)了。
成员函数的重载,覆盖和隐藏
重载发生在相同的作用域中,而覆盖则发生在不同的作用域中
重载:
相同的作用域
函数的名字相同
函数的形参列表,顺序,类型,个数不同
virtual可有可无
覆盖:
作用域不同,属于不同的类中
函数的名字相同
形参列表相同
基类必须是虚函数
隐藏是指派生类的成员函数遮蔽了与其同名的基类成员函数
》》派生类的成员函数与基类的同名,但形参列表不同,这时不论基类是否是virtual基类函数都将被隐藏
》》派生类的成员函数与基类的同名,行参列表相同,而基类成员函数不是virtual,会被隐藏
》》指针的静态类型即指针定义时的类型,与后面的赋值的类型无关。
2. 运算符的重载
(1)不能重载的运算符(考点)
"." ".*" "?:" "sizeof()" "typeid()" "static_cast<>" "dynamic_cast<>" "const_cast<>"
"#" "##"
(2)如果重载为成员函数,则this对象发起对它的调用
(3)如果重载为全局函数,则第一个参数发起对它的调用。
const成员函数:
(1)const成员函,const关键字放在函数的末尾。
(2)函数的内部不会修改任何数据成员。
(3)不能在函数内部修改数据成员和调用其他的非const函数。
(4)const成员函数和返回const类型没有必然的联系。
(5)static成员函数一定不能定义为const的,static成员函数只是全局函数的一个形式上的封装,全局函数
没有const一说。
注意:
const对象只能调用const成员函数,而非const对象既可以调用const成员函数,又可以调用非const成员函数。
C++函数的重载,覆盖和隐藏(——高质量编程第14章)的更多相关文章
- c++高质量编程手册
怡化主管强烈要求我读这本书.... 笔记尚未完成,持续更新呗.. 第1章 高质量软件开发之道 1.1 软件质量基本概念 1.1.1 如何理解软件的质量:功能性和非公能性 1.1.2 提高软件质量的基本 ...
- C++/C高质量编程指南-笔记
复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...
- 成员函数的重载&&隐藏&&覆盖
/* *成员函数的重载,覆盖,隐藏 *重载: *1.同样的范围(在同一个类中) *2.函数名同样 *3.參数不同 *4.virtualkeyword可有可无 *覆盖是指派生类覆盖基类的函数,特征是: ...
- C++高质量编程笔记
/* * 函数介绍: * 输入参数: * 输出参数: * 返回值 : */ void Function(float x, float y, float z) { - } if (-) { - whil ...
- C++之重载覆盖和隐藏
继承体系下同名成员函数的三种关系 重载 在同一作用域内 函数名相同,参数列表不同(分三种情况:参数个数不同,参数类型不同,参数个数和类型都不同) 返回值类型可以相同也可以不同 重写(覆盖) 在不同作用 ...
- C++ 高质量编程附录试题
附录B :C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能.内容限于C++/C常用语法,不涉及数据结构.算法以及深奥的语法.考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不 ...
- C++,C程序设计入门——《高质量程序设计第4章》
1. 连接规范 1. extern “C” 2. 一部分采用C的连接规范 #ifdef __cplusplus extern "C" { #endif #ifdef __cplus ...
- 指针参数的传递(节选 C++/C 高质量编程 林锐)
指针参数是如何传递内存的 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是 ...
- 编写高质量代码:Web前端开发修炼之道(三)
第五章:高质量的Javascript 这章的内容我看的最久,这是跟我js基础没打好有着莫大的关系,但是还是耐着性子看完了, 不懂的东西都是百度上搜索,理解后再继续.下面是记录下来的笔记. 1)如何避免 ...
随机推荐
- 【转】码云source tree 提交超过100m 为什么大文件推不上去
码云source tree 提交超过100m 为什么大文件推不上去 2017年01月12日 16:50:51 阅读数:7634 git -c diff.mnemonicprefix=false -c ...
- QQ面板拖拽(慕课网DOM事件探秘)(上)
QQ面板拖拽,效果如图 JavaScript代码如下: function getByClass(clsName, parent) { var oParent = parent ? document.g ...
- Clean Code 第十章 : 类
最近的CleanCode读到了第十章.这一张主要讲了如何去构造一个类,感觉的CleanCode至此已经不仅仅是单纯的讲如何'写'出漂亮的代码,而是从设计方向上去构造出好的代码了. 本章节主要讲了: * ...
- easybcd 支持 windows 10 和 ubuntu 14.04 双系统启动
家里计算机系统 windows 10 全新安装. 原本是双系统的,还有一个ubuntu. windows 10 安装以后,恢复ubuntu就是问题了. (事后经验:请不要立刻安装bcd修改工具) 最初 ...
- AS400服务程序总结
1.服务程序的创建和调用过程 1.1生成module 1.2编写BND文件确定输出接口 1.3生成服务程序 1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存 2.结 ...
- 禁用DRM
10G: alter system set "_gc_policy_time"=0 scope=spfile sid='*'; alter system set "_gc ...
- python 网络编程篇
基础模拟通话网络程序: #客户端 import socket client = socket.socket() client.connect(('localhost',6969)) client.se ...
- python基础一 day6 序列操作集合
列表删除:pop([index])有返回值 remove('元素‘)没有返回值 按元素删,元素是什么,就写什么,是数字就写数字,不要加引号,加引号就变成字符串了,没有就报错. 字典删除:pop( ’键 ...
- C++虚析构函数的使用
如果,你设计的程序里,释放对象实例的时候,有“使用某个基类的指针,来释放它指向的派生类的实例”这种用法出现的话,那么,这个基类的destructor就应该设计成virtual的. 如果,基类不是vir ...
- ios NSRange
Objective-C中判断字符串是否包含其他字符串 -(BOOL) hasPrefix:(NSString *) astring;检查字符串是否以astring开头:-(BOOL) hasSuffi ...