C++高质量编程指南笔记(五)
来源:互联网 发布:云计算需求调研报告 编辑:程序博客网 时间:2024/06/05 04:57
函数重载
1、C++程序不能直接调用C函数。C++提供了一个C连接制定符号extern “C” 来解决这个问题。
例如:
extern "C"{ void foo(int x, int y);}extern "C"{ #include "myheader.h"}
告诉编译器找名字_foo而不是_foo_int_int。
2、并不是两个函数的名字相同就能重载。全局函数和类的成员函数不算重载,因为函数的作用域不同。
例如:
void Print(...); //全局函数class A{ void Print(...); //成员函数};
不论两个函数的参数是否不同,如果类的某个成员函数要调用全局函数Print,为了与成员函数Print区别,全局函数调用时应加上”::”标志。如
::Print(...); //表示Print是全局函数
3、隐式类型转换导致重载产生二义性
void Print(int x){ cout << "int: " << x << endl;}void Print(float y){ cout << "Float: " << y << endl;}void main(){ Print(1.5); //出错,自动类型转换,因为是double编译器不知道是进入int还是float的函数}
函数的重载、覆盖与隐藏
1、重载与覆盖
成员函数被重载的特征:
(1) 相同的范围(同一个类中)
(2) 相同的名字
(3) 参数不同
(4) virtual关键字可有可无
覆盖是派生类函数覆盖基类函数,特征是:
(1) 不同的范围(分别位于派生类和基类)
(2) 函数名字相同
(3) 参数相同
(4) 基类函数必须有virtual 关键字
隐藏的特征:
(1) 如果派生类的函数与基类的函数名相同,但是参数不同,此时,不论有无virtual关键字,基类的函数都会被隐藏。
(2) 如果派生类的函数与基类的函数相同,参数也相同,但是没有virtual关键字,基类的函数都会被隐藏。
参数的缺省值
1、参数的缺省值应该放在声明中
void Func(int x = 0, int y = 0); //函数声明void Func(int x = 0, int y = 0) //错误,在函数定义里{}
2、不合理的使用可能会导致二义性
void Print(int x);void Print(int x, float y = 0);Print(1); //产生二义性
内联函数
1、用内联函数取代C的宏
使用宏出错,且宏无法操作类的私有成员。
例如
#define MAX(a, b) (a) > (b) ? (a) : (b)result = MAX(1, 2) + 2;//预处理器解释为result = (1) > (2) ? (1) : (2) + 2; +的优先级高,出错。
2、内联函数的风格
void Func(int x, int y);inline void Func(int x, int y) //inline放在函数定义中,放在声明中不起作用,在类声明中定义的函数会自动转化为内联函数{ ...}
(1)如果函数体的代码比较长,使用内联会导致内存消耗比较高。(2)如果出现循环,那么执行函数体内的代码的时间比函数调用的开销大。(3)类的构造和析构函数可能会隐藏一些行为,比如“偷偷的”执行了基类或成员对象的构造函数和析构函数。所以不要随便的将构造函数和析构函数的定义放在声明中。
0 0
- 高质量C++/C编程指南(五)
- 高质量C/C++编程指南(五)
- C++高质量编程指南笔记(五)
- 高质量C/C++编程指南 阅读笔记(五)类的继承与组合
- 《高质量C++&C编程指南》笔记
- 《高质量C++C编程指南》笔记
- 高质量C++C编程指南笔记
- 《高质量C++/C编程指南(林锐)》学习笔记
- 《高质量 C++/C 编程指南 》阅读笔记(二)
- 《高质量 C++/C 编程指南 》阅读笔记(三)
- 《高质量 C++/C 编程指南 》阅读笔记(四)
- 高质量C&C++编程指南---笔记
- 高质量C、C++编程指南 笔记
- 《高质量C/C++编程指南》笔记
- 高质量C/C++编程指南笔记
- 【C】【笔记】高质量C++编程指南
- 高质量C编程指南 学习笔记(一)
- 《高质量C++编程指南》读后笔记五
- android自定义shape属性
- List删除元素
- Matplotlib笔记(一)
- QBC检索方式
- 机器视觉技术原理解析及解决方案集锦
- C++高质量编程指南笔记(五)
- 最全面和简单适配屏幕工具AutoLayout的使用教程!
- 析构函数定义为虚函数场景(多态应用)
- java-三大特性之一继承
- github+hexo搭建独立博客
- Quartz 定时器的使用之 XML 配置方式 (二)
- 《了不起的盖茨比》
- 计算机网络(数据链路层)
- PHP源代码加密