2-3 C++函数提高

目录

一、函数的默认值

二、函数的占位参数

三、函数重载

1. 函数重载的条件

2. 函数重载的注意事项


一、函数的默认值

语法:返回值类型 函数名(参数类型 无默认值的参数名,参数类型 有默认值的参数 = 默认值)

#include <iostream>
using namespace std;

int sum(int a, int b = 10, int c = 20);//声明中进行函数默认值设定,也可以在定义子进行设定

int main() {
	cout << "仅给无默认值的参数传入值:" << endl;
	int a = 10;
	cout << "a + b + c = " << sum(a) << endl; //当函数的参数具有默认值时,函数调用时可以选择只传递无默认值的参数,其它参数使用默认值

	cout << "给部分有默认值的参数传入值:" << endl;
	int b = 20;
	cout << "a + b + c = " << sum(a, b) << endl;//当函数的参数具有默认值时,函数调用时也可以选择给部分有默认值的参数重新传入参数
	
	system("pause");

	return 0;
}

int sum(int a, int b, int c) { //声明中已经设置参数默认值,在定义中不能在进行默认值设定
	return a+b+c;
}
仅给无默认值的参数传入值:
a + b + c = 40
给部分有默认值的参数传入值:
a + b + c = 50
请按任意键继续. . .

注:

  • 函数具有默认值的参数必须全部位于参数列表的最右侧(结尾),而无默认值的参数必须在全部有默认值的参数的左侧;
  • 有默认值的函数在函数声明和函数定义时只能有一个地方有默认值,否则可能出现二义性。

二、函数的占位参数

C++函数的形参列表中可以有占位参数,用来做占位,函数调用时必须填补该位置。

语法:返回值类型 函数名(非占位参数数据类型 非占位参数名,占位参数数据类型)

即使用参数类型进行占位。

注:占位参数可以有默认值,此时函数调用时可以不给占位参数传值。

#include <iostream>
using namespace std;

void test01(int a, int) {  // 最后int用做占位参数
	cout << "This is a function." << endl;
}

void test02(int a, int = 10) {  // 最后int用做占位参数,且给占位参数赋默认值
	cout << "This is a function." << endl;
}

int main() {
	
	int a = 10;

	test01(a, 10);  //函数调用时必须给占位参数传值

    test02(a);      //当占位参数有默认值时,可以不给占位参数传值

	system("pause");

	return 0;
}

三、函数重载

1. 函数重载的条件

函数重载可以使同一个名称的函数实现不同功能,提高复用性。

函数重载的条件:

  • 同一个作用域下
  • 函数名相同
  • 函数参数类型不同参数数量不同参数顺序不同

注:函数的返回值不可以作为函数重载的条件

#include <iostream>
using namespace std;

//函数的初始定义
void func() {
	cout << "调用func()" << endl;
}

//函数参数数量不同情况下的重载
void func(int a) {
	cout << "调用func(int a)" << endl;
}

//函数参数类型不同情况下的重载
void func(double a) {
	cout << "调用func(double a)" << endl;
}

//函数参数个数不同情况下的重载
void func(int a, double b) {
	cout << "调用func(int a, double b)" << endl;
}

//函数参数顺序不同情况下的重载
void func(double a, int b) {
	cout << "调用func(double a, int b)" << endl;
}

//返回值不同不可以作为函数重载的条件,以下为错误案例
//int func(double a, int b) {
//	cout << "调用func(double a, int b)" << endl;
//}

int main() {
	
	func();
	func(2);
	func(2.1);
	func(2, 2.1);
	func(2.1, 2);

	system("pause");

	return 0;
}
调用func()
调用func(int a)
调用func(double a)
调用func(int a, double b)
调用func(double a, int b)
请按任意键继续. . .

2. 函数重载的注意事项

  • 当引用作为函数参数是可以是函数重载的条件,为参数类型不同。
#include <iostream>
using namespace std;

//定义使用引用做参数的函数
void func(int &a) {
	cout << "调用func(int &a)" << endl;
}

//使用const修饰的引用做参数进行函数重载
void func(const int &a) {
	cout << "调用func(const int &a)" << endl;
}

int main() {
	
    int a = 10;
	func(a);
	func(10);  // 当10传入void func(int &a)函数时,有表达式 int &a = 10 非法,因此调用void func(const int &a)函数

	system("pause");

	return 0;
}
调用func(int &a)
调用func(const int &a)
请按任意键继续. . .
  • 函数重载碰到有默认参数时,容易出现二义性,尽量避免在函数重载中使用默认参数
#include <iostream>
using namespace std;

// 定义有默认参数的函数
void func(int a, int b = 10) {
	cout << "调用func(int a, int b = 10)" << endl;
}

//对具有默认参数的函数进行重载(参数数量不同)
void func(int a) {
	cout << "调用func(int a)" << endl;
}

int main() {

	func(10, 20); //当给默认参数传入值时,编译器能够区分我们调用的是 func(int a, int b = 10)
	//func(10);  // 当不给默认参数传值时,编译器无法区分我们调用的是哪个函数,出现二义性

	system("pause");

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Beep函数是一个Windows API函数,用于在计算机上发出声音。它的原型为:WINBASEAPI WINBOOL WINAPI Beep (DWORD dwFreq, DWORD dwDuration)。\[1\]该函数接受两个参数,dwFreq表示要发出的声音的频率,dwDuration表示声音的持续时间。通过调用Beep函数,可以在程序中产生不同频率和持续时间的声音效果。 在引用\[2\]的代码示例中,可以看到Beep函数被用来产生一段音乐。通过调用Beep函数并传入不同的频率和持续时间参数,可以实现不同音符的发声效果。这段代码使用了一系列的Beep函数调用来演奏了一首曲子。 除了Beep函数,Windows.h头文件中还定义了其他一些函数,比如MessageBox函数。MessageBox函数用于在窗口中显示一个消息框,可以用来向用户显示一些提示信息或者询问用户是否执行某个操作。\[3\]该函数也接受多个参数,包括消息框的标题、消息内容和按钮样式等。 总结起来,Beep函数是一个用于在计算机上发出声音的函数,可以通过调用函数并传入不同的参数来产生不同的声音效果。而MessageBox函数则是用于在窗口中显示消息框的函数,可以用来向用户显示提示信息或者询问用户是否执行某个操作。 #### 引用[.reference_title] - *1* *2* *3* [C++ Beep、MessageBox函数详解](https://blog.csdn.net/Dpi168/article/details/110731492)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值