C++中, 重载函数在调用时选择的依据中,( )是错误的。 A参数个数B参数类型C函数名字D函数

C++中,
重载函数在调用时选择的依据中,( )是错误的。
A参数个数B参数类型C函数名字D函数类型

函数的参数名称是错误的。是否是重载函数,需要给编译器提供足够的信息判断。其主要的依据是函数的名字,参数的类型,函数的返回值类型。

函数的重载其实就是“一物多用”的思想(这里指的“物”是“函数名”),其实不仅是函数可以重载,运算符也是可以重载的。例如:运算符“<<”和“>>”既可以作为移位运算符,又可以作为输出流中的插入运算符和输入流中的提取运算符。

扩展资料

C++运算符重载的相关规定如下:

1、不能改变运算符的优先级

2、不能改变运算符的结合型。

3、默认参数不能和重载的运算符一起使用。

4、不能改变运算符的操作数的个数。

5、不能创建新的运算符,只有已有运算符可以被重载。

6、运算符作用于C++内部提供的数据类型时,原来含义保持不变。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-01-10

重载函数要求这些函数名必须相同,这样才叫“重载”,不然根本就成了两个函数了。

为什么函数类型可以不同?因为根据输入参数不同,可能需要返回的参数类型也不同。

举一个简单例子:

int add(int a,int b)
{
    return a+b;
}
float add(float a,float b)
{
    return a+b;
}

输入的两个加数可能是整型,可能是浮点型。假如是整型直接返回整型就行了,但假如是浮点型,再返回整型结果就错误了,因此需要返回浮点型。可见重载函数的返回类型可以不同。

追问

我起初也是这么想的,可是答案选D

对于D的话,如果两个整数相加,和三个整数相加,返回类型就是相同的啊

追答

你要看题目问的是什么,问什么就答什么

题目问的是“选择的依据”

什么意思?假如我是编译器,我怎么知道该用这些重载函数中的哪一个?

假设我在上面的例子中再加一个

int add(int a)
{
    return 2*a;
}

现在在主函数中有这样三句话:

add(1);
add(1,2);
add(0.1,0.2);

假如你是编译器,你怎么处理?

对于第一句话,因为只有一个参数,所以你会选择return 2*a的函数。这是根据参数个数选择;

对于第二句话和第三句话,因为一个是整型,一个是浮点型,因此你会选择前一个用add(int a,int b),后一个用add(float a,float b)。这是根据参数类型选择;

至于函数返回类型,返回类型和调用判断有关吗?返回是函数执行过程中的事情,不是函数初始化的时候调用的事情。

假如我写这样两个函数

int add(int a,int b)
{
    return a+b;
}
float add(int a,int b)
{
    return a+b;
}

然后在主函数中调用add(1,2),你能判断该使用哪个函数吗?

为什么C是对的?因为重载函数就是根据名字重载的,这是最基本的道理。

int add(int a,int b)
{
    return a+b;
}
int sub(int a,int b)
    return a-b;
}

请问你是编译器,对于add(2,3);这个语句,你怎么知道该调用add(int a,int b)而不是sub(int a,int b)呢?

追问

返回类型和函数调用无关,那就不能根据函数的类型来判断选择哪个函数,是不是D就错了

追答

打这么多字你却采纳了别人,我没法回答你了

追问

回答问题是传播知识与采纳与否无关

你回答我的问题就是奔着采纳来的吗,那我就会怀疑答案的正确性了

追答

不好意思我不想继续传播知识了,请见谅
既然不采纳就说明你怀疑我的回答而更认同别人的,既然如此那我何必继续浪费时间做无用功呢。

追问

那你说说你选什么

如果你觉得是C,那你的答案确实是错的,那我就不能采纳你的回答

追答

那就请你去问那个人,既然你更认可他的话。这个问题我不会再回答了。

追问

最起码那个人觉得应该选D,而你觉得应该选C,可以说你根本没有理解题目的意思

第2个回答  2020-02-27
函数返回值的类型和参数名称都不可以作为依据
第3个回答  2016-01-10
选择c追答

函数名字怎么会是依据呢

追问

为什么不选D呢

我知道选c,就是对d有点疑问

追答

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。

追问

调用函数的时候,对函数的类型没有什么要求吧

追答

不好意思,我仔细想了想,可能应该选d

在调用时和函数类型的定义无关

追问

如果选d,那c又怎么解释,其实答案选d

追答

是的,就是为了不考虑类型,简化程序才使用重载函数的

追问

函数类型是不是指函数的返回值?

c又怎么解释

追答

我的能力没法向你解释清楚,复制一段高票答案给你

重载是为了减少麻烦才产生的。
打个比方,你为了要计算两个数的和,写了一个函数,如下:
int intSum(int nA,int nB)
{
return (nA+nB);
}
这个只是计算了两个整形的和,或许你还要写一个计算浮点数和的函数:
float floatSum(float fA,float fB)
{
return (fA+fB);
}
或许你还需要计算一个浮点数和一个整形的和,还需要一个函数:
float float_intSum(float fA,int nB)
{
return (fA+(float)nB);
}
甚至,如果你用C++的话,你还会需要一些计算对象之间的和,等等。。。。
当写了这么多的函数,在实际运用中根据需要选择不同的函数来计算某些类型的和,我想你也记不住这么多函数。用重载吧,只需要记住一个函数名就行了。
/////////////////////////////////////////////////////////////////////////////
//函数Fun_Sum的重载

int Fun_Sum(int A,int B)
{
return (A+B);
}
float Fun_Sum(float A,float B)
{
return (A+B);
}
double Fun_Sum(double A,double B)
{
return (A+B);
}
UINT Fun_Sum(UINT A,UINT B)
{
return (A+B);
}
//等等,可以的话这种重载写数十个也不会重复。
//好了,以后你想要计算某两个类型的和时(可以是不同类型),不需要去想该用哪个计算和的函数,统统调用函数Fun_Sum就行了,至于到底是其中的哪一个函数在被调用,让编译器去伤脑筋吧

理解了吗?

追问

是不是两个int相加,返回值必须是int

追答

是,但整形和浮点加我就不知道了

追问

c还是不太理解

追答

可能要考虑字数,返回值为最大字数

追问

是不是看谁的优先级高就返回谁

追答

是,我觉得是这样

追问

谢谢你啊,不懂得我再去问问老师。请问你大几的?

追答

好吧,我大四,而且是自动化的,快忘光了

追问

自动化对编程的要求不高吧,我信息安全专业的,对编程要求还是很高的

追答

是的,所以我考完二级证就忘了ㄟ( ▔, ▔ )ㄏ。不过毕设还是要编程,毕竟要做控制

追问

我才大一呢,过完年回来就要考二级了,回家还得自学

追答

放宽心,选择题很容易,编程题就那几种类型,有时候都能做到题库原题

不过你们为什么大一就考,学了c语言了吗

追问

不难就好!我先睡觉啦

追答

追问

我c语言和c++都学了,不过都还没学完,c++还差一点就学完啦,考试是我自己报名的,也可以不报,我想早点考完而已

追答

可以,看来是有追求的人,大二就能考三级了

追问

早点考完可以学更多别的东西,不过都得自学

身边的同学很早就开始自学了,有的在高中就学完了c语言,有的同学早就开始学渗透测试,linux,之类的

追答

额,你们学校的学风很好啊,冒昧问一句,是985吗?我的学校只是一普通211

追问

我的也是211啊

本回答被提问者采纳
相似回答