[C++]缺省值和函数重载

[C++]缺省值和函数重载本文介绍了 C 中函数的缺省值参数 包括全缺省参数和半缺省参数的概念 以及它们的使用规则

大家好,欢迎来到IT知识分享网。

一、缺省值

(一)缺省值概念:

  缺省参数是
声明或定义函数时为函数
参数指定一个缺省值。在调用该函数时,如果没有指定形参则采用该形参的缺省值,否则使用指定的实参。
 
带有缺省值参数的函数代码:

#include <iostream> using namespace std; //缺省值函数 void Func1(const char* str = "Func1")//默认参数str指向字符串常量"Func1" { cout << str << endl; } int main() { Func1();//不传入参数则采用该形参的缺省值"Func1" Func1("指定的实参");//如果指定了实参则采用指定了的参数 return 0; }

代码运行结果:

[C++]缺省值和函数重载

(二)缺省值参数的分类:

1、全缺省参数

//全缺省 //默认立方体的长宽高都为1 void box(double length = 1, double width = 1, double height = 1) { cout << "长:" << length << endl; cout << "宽:" << width << endl; cout << "高:" << height << endl; cout << endl; } int main() { box(); box(10);//length指定了实参 另外两个为缺省值 box(10,20);//lenght和widht指定了实参 heihgt为缺省值 box(10,20,30);//三个都指定了实参,缺省值不使用 return 0; }

代码运行结果: 

[C++]缺省值和函数重载

2、半缺省参数 

//半缺省参数 //立方体的高度默认为10 长度和宽度需要指定形参 void box1(double length,double width,double height = 10) { cout << "长:" << length << endl; cout << "宽:" << width << endl; cout << "高:" << height << endl; cout << endl; } int main() { //box1(); //错误,需要指定两个形参 //box1(10); //错误,需要指定两个形参 box1(10, 20);//lenght和widht指定了实参 heihgt为缺省值 box1(10, 20, 30);//三个都指定了实参,缺省值不使用 return 0; }

代码运行结果:

[C++]缺省值和函数重载

注意事项: 

1、函数的声明与定义分开时,缺省值只需在声明时给出,如果声明和定义都给出了缺省值,编译器无法知道要使用哪一边的缺省值,会导致编译报错。

2、半缺省值只能从函数参数的右边到左边依次给出,不能从左到右给或者是间隔着给,函数传参时也不能间隔着传

3、缺省值必须是全局变量或常量

4、C语言编译器不支持缺省值

二、函数重载

(一)函数重载的概念

  C++允许同一函数名定义多个函数,而这些函数的参数个数、参数类型、参数的顺序和返回值可以不相同。这就是函数的重载(function overloading)即对一个函数名重新赋予它的新的含义,使一个函数名可以多用。所谓重载,其实就是“一物多用”。

(二)函数的重载条件

1、参数的类型的不同

//函数的参数类型不同 //两种不同类型的加法运算函数 //如果Add传入的是两个int类型的参数则执行下面这个函数 int Add(int x1, int x2) { return x1 + x2; } //如果Add传入的是两个double类型的参数则执行下面这个函数 double Add(double x1, double x2) { return x1 + x2; } int main() { int i1 = 5, i2 = 6; double d1 = 5.6, d2 = 6.5; cout << i1 << " + " << i2 << " = " << Add(i1, i2)<<endl; cout << d1 << " + " << d2 << " = " << Add(d1, d2)<<endl; return 0; }

2、参数的个数不同

//参数的个数不同 void Func2() { cout << "Func2()" << endl; } void Func2(int a) { cout << "Func2(int a)" << endl; } void Func2(int a, int b) { cout << "Func2(int a,int b)" << endl; } int main() { Func2(); Func2(1); Func2(1,2); return 0; }

运行结果:

[C++]缺省值和函数重载

 3、参数的顺序不同

//当参数的个数和类型都相同时 //参数的顺序不同 void Func3(int a,double b) { cout << "Func3(int a,double b)" << endl; } void Func3(double a, int b) { cout << "Func3(double a,int b)" << endl; } int main() { int a = 0; double b = 0; Func3(a, b); Func3(b, a); return 0; }

运行结果:

[C++]缺省值和函数重载

(三)注意:

1、函数的重载必须满足上述的三个条件之一:参数的类型、个数、顺序不同。

2、函数重载会存在二义性问题。

比如下面的两个Add重载函数:

//函数重载的二义性问题 int Add(int x1, int x2) { return x1 + x2; } //如果Add传入的是两个double类型的参数则执行下面这个函数 double Add(double x1, double x2) { return x1 + x2; } int main() { int a = 5; double b = 5.5; Add1(a, b);//这里传入的是整形的a和双精度类型的b return 0; }

出现编译报错:

[C++]缺省值和函数重载

原因是这里传入的参数对执行的重载函数存在二义性。

变量a是整形,而变量b是双精度性,如果我们将其混合传入Add函数中,Add的两个重载函数都可以接收a和b来执行对应操作因为int类型和double类型存在隐式类型转换。编译器分不清用户具体想执行的是哪个重载的Add函数,就会产生二义性,从而发生编译报错。

[C++]缺省值和函数重载

解决办法是在传入参数时对a或b进行显式强制类型转化消除二义性,修改代码如下:

//函数重载的二义性问题 int Add(int x1, int x2) { return x1 + x2; } //如果Add传入的是两个double类型的参数则执行下面这个函数 double Add(double x1, double x2) { return x1 + x2; } int main() { int a = 5; double b = 5.5; //Add(a, b);//这里传入的是整形的a和双精度类型的b //显式强制类型转化 cout<<Add(double(a), b)<<endl; cout<<Add(a, int(b))<<endl; return 0; }

 运行结果:

[C++]缺省值和函数重载

3、C语言编译器不支持函数重载。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126809.html

(0)
上一篇 2025-09-15 20:00
下一篇 2025-09-15 20:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信