对于不返回值而且只有一个int类型的参数的函数,以下哪些函数原型是正确的?

A.
void f(int x);
B.
void f();
C.
void f(int);
D.
void f(x);
为什么D是错的啊?其他的又对在什么地方呢?

C++函数的高级特性

对比于 C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和 virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与virtual 机制仅用于类的成员函数。

重载和内联肯定有其好处才会被 C++语言采纳,但是不可以当成免费的午餐而滥用。

本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及要警惕错用。

函数重载的概念

重载的起源

自然语言中,一个词可以有许多不同的含义,即该词被重载了。人们可以通过上下文来判断该词到底是哪种含义。“词的重载”可以使语言更加简练。例如“吃饭”的含义十分广泛,人们没有必要每次非得说清楚具体吃什么不可。别迂腐得象孔已己,说茴香豆的茴字有四种写法。

在 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 章),构造函数只能有一个名字。如果想用几种不同的方法创建对象该怎么办?别无选择,只能用重载机制来实现。所以类可以有多个同名的构造函数。

8.1.2 重载是如何实现的?

几个同名的重载函数仍然是不同的函数,它们是如何区分的呢?我们自然想到函数接口的两个要素:参数与返回值。

如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数。

如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如:

void Function(void);

int Function (void);

上述两个函数,第一个没有返回值,第二个的返回值是 int 类型。如果这样调用函数:

int x = Function ();

则可以判断出 Function 是第二个函数。问题是在 C++/C 程序中,我们可以忽略函数的

返回值。在这种情况下,编译器和程序员都不知道哪个 Function 函数被调用。

所以只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。例如编译器为示例 8-1-1 中的三个 Eat 函数产生象_eat_beef、_eat_fish、_eat_chicken 之类的内部标识符(不同的编译器可能产生不同风格的内部标识符)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-28

对比一下书本,看看函数是如何定义的,这已经算是基础的基础了

本回答被提问者和网友采纳
第2个回答  2020-03-28
D只有形参名称,没有类型,,就会被认为是一个未声明的变量
相似回答