C++函数的高级特性——小结

相对于C语言,C++增加了重载(overload)、内联(inline)、const和virtual四种新机制。

1 重载

只能靠参数列表而不能紧靠返回值类型的不同来区分重载函数。编译器根据参数列表为每个参数产生不同的内部标识符。由于编译后的名字不同,C++程序不能直接调用编译后的C函数。C++提供了一个C交换指示符extern “C”来解决这个问题,例如:

#ifdef __cplusplus
extern "C" {
#endif
#include "myheader.h"
...//其他C头文件
#ifdef __cplusplus
}
#endif

2 重载、覆盖与隐藏的区别

成员函数被重载的特征是:

  • 具有相同的作用域(即在同一个类定义中)
  • 函数名字相同
  • 参数类型、顺序或数目不同(包括const和非const参数)
  • virtual关键字可有可无

覆盖是派生类改写了基类的成员函数,其特征是

  • 不同的作用域(分别在基类和派生类中)
  • 函数名字相同
  • 参数列表完全相同
  • 基类函数必须是虚函数

隐藏是指派生类的成员函数遮蔽了与之同名的基类成员函数,具体规则如下:

  • 派生类的函数与基类的函数同名,但是参数列表有所差异,此时,无论有没有virtual关键字,基类的函数在派生类中会被隐藏(区别于重载)
  • 派生类的函数与基类的函数同名,参数列表也相同,但是基类函数没有virtual关键字,此时,基类的函数在派生类中会被隐藏(区别于覆盖)
  • 覆盖是一种特殊的隐藏

3 参数的默认值

参数默认值放在函数的声明中,不能放在定义体中。

4 运算符的重载

原文地址:https://www.cnblogs.com/alwayswangzi/p/6505053.html