【C++】核心编程——03函数高级

本文介绍了C++中函数的三种重要特性:默认参数、占位参数和函数重载。详细阐述了如何设置和使用函数默认参数,以及在声明和实现中需要注意的事项。占位参数允许函数接受不同数量的参数,而函数重载则通过不同的参数类型、数量或顺序实现同名函数的多用途。同时,提到了函数重载时的注意事项,如避免因默认参数导致的二义性问题。
摘要由CSDN通过智能技术生成

3.1 函数默认参数

  定义:在C++中,函数的形参列表中的形参是可以有默认值的。
  语法:返回值类型 函数名 (参数=默认值){}
  注意:
  (1)如果某个位置已经有了默认参数,那么从这个位置往后,必须要有默认参数
  (2)如果函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能有一个有默认参数

#include <iostream>
using namespace std;
//在C++中,函数的形参列表中的形参是可以有默认值的。
//语法:返回值类型 函数名 (参数=默认值){}

int func(int a , int b = 2,int c=32)
{
	return a + b+c;
}
//注意:
//(1)如果某个位置已经有了默认参数,那么从这个位置往后,必须要有默认参数
//int func1(int a, int b = 10, int c)//b往后都需要有默认参数
//{
//	return a + b + c;
//}

//(2)如果函数声明有默认参数,函数实现就不能有默认参数:声明和实现只能有一个有默认参数
int func2(int a=0, int b = 10);
int func2(int a, int b)
{
	return a + b;
}

int main()
{
	//如果传入自己的数据,就用自己的数据,如果没有,那就使用默认值
	int r=func(20);
	cout << "结果为:" << r << endl;

	int r = func(20);
	cout << "结果为:" << r << endl;
}

2 函数占位参数

  定义:C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
  语法:返回值类型 函数名 (数据类型){}

#include <iostream>
using namespace std;

//占位参数
//返回值类型 函数名(数据类型)
void func(int a, int)//int是占位的,调用函数时必须传入数据
{
	cout<<"这是函数func"<<endl;
}

//占位参数,在目前用不到,后续会使用
//占位参数,还可以有默认值
int main()
{
	func(20,20);
}

3 函数重载

3.1 函数重载概述

  作用:函数名可以相同,提高复用性
  函数重载满足条件:
  (1)同一个作用域下
  (2)函数名称相同
  (3)函数参数:类型不同,或者个数不同或者顺序不同

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

#include <iostream>
using namespace std;

//函数重载:可以让函数名相同,提高复用性

//函数重载的满足条件:
//1.同一个作用域下
//2.函数名相同
//3.函数的参数:类型不同,个数不同,或顺序不同
void func(int a, double b)
{
	cout << "函数func(int a, double b)" << endl;
}
void func(int a)//参数个数不同
{
	cout << "函数func(int a)" << endl;
}
void func(double a,double b)//参数类型不同
{
	cout << "函数func(double a,double b)" << endl;
}
void func(double a, int b)//参数顺序不同
{
	cout << "函数func(double a, int b))" << endl;
}
int main()
{
	func(20);//调用第二个函数
	func(20, 20.2);//调用第一个函数
	func(20.1, 20.2);//调用第三个函数
	func(20.1, 20);//调用第四个函数
}

3.2 函数重载注意事项

  注意:
  (1)引用作为重载条件
  (2)函数重载遇到函数默认参数:编译器可能不知道调用哪个函数,出现二义性(尽量避免)

#include <iostream>
using namespace std;

//函数重载:可以让函数名相同,提高复用性

//函数重载的注意事项:
//1.引用作为重载条件
void func(int &a)
{
	cout << "函数func(int &a)" << endl;
}
void func(const int & a)//类型不同
{
	cout << "函数func(const int & a)" << endl;
}

//2.函数重载遇到函数默认参数:编译器可能不知道调用哪个函数,出现二义性(尽量避免)
void func2(int a,int b=10)
{
	cout << "函数func2(int a)" << endl;
}
void func2(int a)
{
	cout << "函数func2(int a)" << endl;
}

int main()
{
	int a = 10;
	func(a);//调用func(int &a)函数
	func(10);//调用func(const int & a)函数
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值