c++???吗对吧
#include<iostream>using namespace std;
int max(int a=0,int b=0)
{
return a>ba:b;
}
int max(int a=0,int b=0,int c=0)
{
int n=a;
if(b>n)
n=b;
if(c>n)
n=c;
return n;
}
int main(){
printf("%d\n",max(1,2));
printf("%d\n",max(1,2,3));
}
重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。
条件如下
两个重载函数必须在下列一个或两个方面有所区别:
1、函数有不同参数。
2、函数有不同参数类型,
C++的这种编程机制给编程者极大的方便,不需要为功能相似、参数不同的函数选用不同的函数名,也增强了程序的可读性。
C++运算符重载的相关规定如下:
(1)不能改变运算符的优先级;
(2)不能改变运算符的结合型;
(3)默认参数不能和重载的运算符一起使用;
(4)不能改变运算符的 *** 作数的个数;
(5)不能创建新的运算符,只有已有运算符可以被重载;
(6)运算符作用于C++内部提供的数据类型时,原来含义保持不变。
默认参数读是常量。成员变量是变化的。
其实我觉得也不是不能这么规定,但是或许会更复杂吧,而且,规定只能是常量后,也很容易实现你要的结果,显式写个if就好了。
至于为什么定义为常量,网上搜到个说法如下:
因为程序在运行时才会给程序中定义的变量开辟内存空间和进行初始化,函数是在被调用的时候才会给形参和函数体内定义的变量开辟内存空间,带有默认形参的函数在给形参开辟空间后就回先把默认值赋给形参,若没有实参传递,形参值就是默认值,默认值必须是系统能确切找得到的值才能进行对带有默认值形参进行初始化,而局部变量不是在正在被调用的函数内定义的(形参是函数一开始就定义的)或者在其他函数内定义并被使用完就被释放掉了,因此系统就会找不到一个确切的值赋给形参,所以函数参数默认值不允许为局部变量。
不引起多意性就没问题,
void f() 和void f(int i=0),这就引起了多义性,编译器会报错
但是void f() 和 void f(int i,int j=0) 就没问题
当然可以使用默认参数了
例:
//函数声明指定r的默认值是65,如果在调用时确定r的值是65那么则在调用时不用再写参数了
float area(float r=65);
//直接调用函数,不用给参数相当于area(65);
area();
要注意:
1如果函数的定义在调用之前,则应在函数定义中给出默认值。
2一个函数不能既作为重载函数,有作为有默认参数的函数。因为在调用函数时如果少写一个参数,系统无法判断是利用的重载函数还是利用的默认参数的函数,就产生了二义性,系统无法执行。
就是名字相同才叫重载啊,不同的话,那还管什么
参数列表不同包含
1、函数的参数个数不同。
2、函数的参数类型不同或者参数类型顺序不同。
特别注意2点
仅仅返回值类型不同,不能作为函数重载
一个函数不能既作为重载函数,又作为有默认参数的函数
既然要求是正整数中的。
那么
这个函数的第三个默认参数 就可以设置为0或者负值。
至于输入
题目要求的只是函数而已。
输入可以做其它手脚
比如说 先输入一个数,2或者3,表示要判断几个数。
也可以要求输入在一行中。 获取到一个数后,获取下一个字符,如果是空格,则继续输入,如果是换行,则停止输入就好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)