C++中,
重载函数在调用时选择的依据中,( )是错误的。
A参数个数B参数类型C函数名字D函数类型
函数的参数名称是错误的。是否是重载函数,需要给编译器提供足够的信息判断。其主要的依据是函数的名字,参数的类型,函数的返回值类型。
函数的重载其实就是“一物多用”的思想(这里指的“物”是“函数名”),其实不仅是函数可以重载,运算符也是可以重载的。例如:运算符“<<”和“>>”既可以作为移位运算符,又可以作为输出流中的插入运算符和输入流中的提取运算符。
扩展资料
C++运算符重载的相关规定如下:
1、不能改变运算符的优先级。
2、不能改变运算符的结合型。
3、默认参数不能和重载的运算符一起使用。
4、不能改变运算符的操作数的个数。
5、不能创建新的运算符,只有已有运算符可以被重载。
6、运算符作用于C++内部提供的数据类型时,原来含义保持不变。
重载函数要求这些函数名必须相同,这样才叫“重载”,不然根本就成了两个函数了。
为什么函数类型可以不同?因为根据输入参数不同,可能需要返回的参数类型也不同。
举一个简单例子:
int add(int a,int b)输入的两个加数可能是整型,可能是浮点型。假如是整型直接返回整型就行了,但假如是浮点型,再返回整型结果就错误了,因此需要返回浮点型。可见重载函数的返回类型可以不同。
我起初也是这么想的,可是答案选D
对于D的话,如果两个整数相加,和三个整数相加,返回类型就是相同的啊
追答你要看题目问的是什么,问什么就答什么
题目问的是“选择的依据”
什么意思?假如我是编译器,我怎么知道该用这些重载函数中的哪一个?
假设我在上面的例子中再加一个
int add(int a)现在在主函数中有这样三句话:
add(1);假如你是编译器,你怎么处理?
对于第一句话,因为只有一个参数,所以你会选择return 2*a的函数。这是根据参数个数选择;
对于第二句话和第三句话,因为一个是整型,一个是浮点型,因此你会选择前一个用add(int a,int b),后一个用add(float a,float b)。这是根据参数类型选择;
至于函数返回类型,返回类型和调用判断有关吗?返回是函数执行过程中的事情,不是函数初始化的时候调用的事情。
假如我写这样两个函数
int add(int a,int b)然后在主函数中调用add(1,2),你能判断该使用哪个函数吗?
为什么C是对的?因为重载函数就是根据名字重载的,这是最基本的道理。
int add(int a,int b)请问你是编译器,对于add(2,3);这个语句,你怎么知道该调用add(int a,int b)而不是sub(int a,int b)呢?
返回类型和函数调用无关,那就不能根据函数的类型来判断选择哪个函数,是不是D就错了
追答打这么多字你却采纳了别人,我没法回答你了
追问回答问题是传播知识与采纳与否无关
你回答我的问题就是奔着采纳来的吗,那我就会怀疑答案的正确性了
追答不好意思我不想继续传播知识了,请见谅
既然不采纳就说明你怀疑我的回答而更认同别人的,既然如此那我何必继续浪费时间做无用功呢。
那你说说你选什么
如果你觉得是C,那你的答案确实是错的,那我就不能采纳你的回答
追答那就请你去问那个人,既然你更认可他的话。这个问题我不会再回答了。
追问最起码那个人觉得应该选D,而你觉得应该选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啊
本回答被提问者采纳