C++之简单缺省函数与函数重载介绍

缺省参数

即函数调用时实参个数可以与形参不相同

缺省参数指在定义时为形参指定缺省值(默认值) 这样在函数调用时,对于缺省参数可以给出实参值,也可以不给出 给出实参值,将实参传递给形参进行调用,如果不给出实参,按缺省值进行调用

缺省参数不一定是常量表达式,可以是任意表达式,甚至可以通过调用函数给出,表达式必须有意义

 void delay(int loops = 5){
     //延时函数,默认时延为5个时间单位
     for(;loops>0;loops--);
 }
 ​
 int main(){
     dalay(3);
     cout<<"延时三个时间单位"<<endl;
     dalay();//等同于dalay(5)
     cout<<"时延五个时间单位"<<endl;
     return 0;
 }


 void func(int a, int b = my_rand()) {//默认值什么都可以 
     cout << "a = " << a << "b = " << b << endl;
 }
 ​
 int main() {
     func(1);
 }

缺省参数可以有多个,但所有缺省参数必须放在参数表的右侧,即先定义所有非缺省参数,在定义缺省参数 这是因为在函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才不会产生二义性

 
void func(int a = 0, int b = 4, int c = 3, int d = 2, int e = 1) {
     printf("a = %d,b = %d,c = %d,d = %d,e = %d\n", a, b, c, d, e);
 }
 //给默认值从右到左给 不能跳过
 ​
 int main() {
     int x = 10;
     cin >> x;
 ​
     func(12,23);
     //实参从左到右给 不能跳过 没有给实参的采用func中的默认值 给实参的用实参
     func(12, (23, 34, 45, 56));
     //逗号表达式 采取最后一位56作为b的传递值 其余采取实参或默认值
     return 0;
 }

缺省参数不一定必须是常变量,可以使用任意表达式

 void func(int a, int* p = (int*)malloc(sizeof(int))) {
     cout << a << endl;
     free(p);
 }
 ​
 int main() {
     func(1);
 }

函数重载

函数原型:int(类别) + MAX(函数名) + 参数列表

c++是根据函数原型进行区分的 c是根据函数名进行区分的 所以c++可以进行函数的重载

函数重载解析步骤: 1.确定函数调用考虑的重载函数几何,确定函数调用中实参表属性 2.从重载函数集合中选择函数,该函数可以在(给出实参个数和类型)的情况下可以调用函数 3.选择与调用最匹配的函数

 //int H
 //"?MAX@@YAHHH@Z" —— 新的函数名(名字粉碎技术)
 int MAX(int a, int b) { return a > b ? a : b; }
 //char D
 //"?MAX@@YADDD@Z"
 char MAX(char a, char b) { return a > b ? a : b; }
 //double N
 //"?MAX@@YANNN@Z"
 double MAX(double a, double b) { return a > b ? a : b; }
 ​
 int main() {
     cout << MAX(12, 23) << endl;
     cout << MAX('a', 'x') << endl;
     cout << MAX(12.23, 34.45) << endl;
 }
 ​
 //返回类型上不同 不能重载 计算机无法确定你所想进行的是哪个函数
 int MAX(char a, char b){ return a > b ? a : b; }
 char MAX(char a, char b) { return a > b ? a : b; }
 ​

如果两个函数的参数表相同,但返回值不同,会被标记为编译错误,函数重复声明

不可以重载的运算符: :: sizeof() ? : *.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值