相对于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 运算符的重载