对重载函数的调用不明确_C++学习刷题3--重载函数和具有默认参数的函数

本文详细介绍了C++中的重载函数和具有默认参数的函数的概念、特点以及在实际编程中应注意的事项。通过知识点讲解和试题解析,帮助读者理解如何正确使用重载函数和默认参数,提升编程技能。
54d9b8984f1fab79ee637c67a82b9c34.png

一、前言

本部分为C++语言刷题系列中的第3节,主要讲解本部分主要讲解两个知识点:重载函数和具有默认参数的函数。欢迎大家提出意见、指出错误或提供更好的题目!

二、知识点讲解

2.1重载函数

概念:C++语言的重载函数是指,在同一作用域内,具有相同的函数名称,使用不同的参数列表的多个同名函数。其中,同一作用域是指同一类中或同一命名空间中两种情况。

知识点1:使用重载函数的优点是,不必使用不同的函数名、有助于理解和调试代码、易于维护代码。

知识点2:区别重载函数的依据是相同的函数名和不同的形参列表,不涉及到函数的返回类型

知识点3:不同的形参列表,可以是形参的个数不同,也可以是相应位置的形参数据类型不同

void display(int one);

void display(int one, int two);

void display(float one);

知识点4:当编译重载函数调用时,编译器是依据实参的数据类型匹配形参的数据类型来确定所调用的具体函数。只有当且仅当能唯一确定一个具体函数时,此函数调用才编译正确。

2.2具有默认参数的函数

概念:在C++语言中,可以在函数声明或定义时给出默认形参值。而在调用时,如果此形参没有被提供实参数据,则此形参直接采用预先给出的默认值。

由此可知,对于具有默认值的形参,在函数调用时可以提供实参,也可以不提供实参。

知识点1:一旦某一形参被赋于了默认值,则其后续所有形参也必须具有默认值。

void test(int num1=2, int num2, char ch); //错误

知识点2:默认值可以在函数原型声明或者函数定义中给出,但不能在两个位置同时给出。建议在函数原型声明中指定默认值

知识点3:当函数的形参具有默认值时,会影响到重载函数的判断。

void test(int num1);

void test(int num1,int num2 = 3);

尽管这两个函数的形参个数不同,但第二个函数的第二个形参具有默认值,完全可以与第一个函函的调用方式相同,导致编译器无法确定调用那个函数而编译错误。

三、试题解析

1.关于函数重载,下列叙述中错误的是( )。

A.重载函数的函数名必须相同

B.重载函数必须在参数个数或类型上有所不同

C.重载函数的返回值类型必须相同

D.重载函数的函数体可以有所不同

正确答案:C

解析:所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为C。

2.已知函数func的原型为

int func(int, double);

下列重载函数原型中错误的是( )。

A.char func(int, double);

B.bool func(int, double, bool);

C.int func(int, char*);

D.float func(int, double, int);

正确答案:A

解析:选项A中形参名与题干给出的一样,故不是函数重载。选项B,C,D选项中,各个函数的形参都与题干中所给的函数形参不同,为函数重载,正确。故答案为选项A。

3.下列关于默认参数的叙述中,错误的是()。

A.为形参列表中的多个参数指定默认值时,应从右至左进行设置

B.若函数的所有形参都指定了默认值,则调用时可不给出实参

C.C++中的默认参数可以简化对复杂函数的调用

D.若要为参数指定默认值,必须在函数定义及其原型声明中同时指定

正确答案:D

解析:既可以在函数声明中指定默认参数,也可以在函数定义中指定默认参数,但是,在一个源文件中,只能为形参指定默认参数一次,通常应在函数声明中指定默认参数。A、B、C正确,选项D错误;答案为D。

4.下列函数声明中,错误的是( )。

A.int min(int x, int y);

B.int min(int x, int y=0);

C.int min(int x=0, int y);

D.int min(int x=0, int y=0);

正确答案:C

解析:默认参数是通过给形参表中的形参提供明确的初始值来指定的,可以为一个或多个形参定义默认值,但是如果有一个形参具有默认值,那它右边的形参都必须有默认值(即全是默认参数)。选项C错误,形参y也必须要有默认值C。

5.若已经定义了如下的函数:

int func(int i, char c);

则下列函数中可以作为此函数的重载函数的是( )。

A.int func(int i, char c, char b='?');

B.int func(int j, char b);

C.char func(char c, int i);

D.char func(int i, char c);

正确答案:C

解析:C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。A选项的形参有三个,但第三个形参具有默认值,且前两个形参与题目中的函数相同,而B、D选项参数个数和类型都与题目中相同,所以不能作为重载函数。C选项函数的参数类型与题目中不同,所以可以作为重载函数。

四、试题测试

1.采用重载函数的目的是( )。

A.实现共享

B.减少空间

C.提高速度

D.使用方便,提高可读性

2.下列哪个不是函数重载需要满足的条件( )。

A.返回值类型不同

B.参数个数不同

C.参数个数相同时,对应位置的参数类型不同

D.函数名相同

3.在函数调用时,如某一默认参数要指明一个特定值,则有( )。

A.其之前所有参数都必须赋值

B.其之后所有参数都必须赋值

C.其前、后所有参数都必须赋值

D.其前、后所有参数都不必赋值

4.对函数int saveName(char * first,char * sec=" ",char * thd=" ")下列调用方法不正确的是

A.int s=saveName("1","2","3");

B.int s=saveName("1","2");

C.int s=saveName("1");

D.int s=saveName("1",,"3");

5.下列默认参数的声明不正确的是

A.int max(int a,int b,int c,int d=0);

B.int max(int a,int b,int c=0,int d=0);

C.int max(int a=0,int b,int c=0,int d=0);

D.int max(int a,int b=0,int c=0,int d=0);

------------------------------

欢迎大家提出意见、指出错误或提供更好的题目,只有大家的共同努力,才能帮助更多人掌握C++的基本概念,顺利通过考试!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值