对比于C语言的函数,C++增加了重载(overloaded)、内联(inline)、const和virtual四种新机制
其中重载和内联机制既可用于全局函数也可用于类的成员函数,const与virtual机制仅用于类的成员函数
重载和内联肯定有其好处才会被C++语言采纳,但是不可以当成免费的午餐而滥用
本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及要警惕错用
1 函数重载的概念 8
1 重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了
人们可以通过上下文来判断该词到底是哪种含义
“词的重载”可以使语言更加简练
例如“吃饭”的含义十分广泛,人们没有必要每次非得说清楚具体吃什么不可
别迂腐得象孔已己,说茴香豆的茴字有四种写法
在 C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数载
这样便于记忆,提高了函数的易用性,这是C++语言采用重载机制的一个理由
例如示例 8-1-1中的函数EatBeef,EatFish,EatChicken可以用同一个函数名 Eat表示,用不同类型的参数加以区别
void EatBeef(„); // 可以改为 void Eat(Beef „); void EatFish(„); // 可以改为 void Eat(Fish „); void EatChicken(„); // 可以改为 void Eat(Chicken „); 示例 8-1-1 重载函数Eat C++语言采用重载机制的另一个理由是:类的构造函数需要重载机制
因为 C++规定构造函数与类同名(请参见第 9章),构造函数只能有一个名字
如果想用几种不同的方法创建对象该怎么办
别无选择,只能用重载机制来实现
所以类可以有多个同名的构造函数
2 重载是如何实现的
几个同名的重载函数仍然是不同的函数,它们是如