C++——函数重载

Posted 借我十斤肉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++——函数重载相关的知识,希望对你有一定的参考价值。

1 函数重载概述

1、作用:函数名可以相同,提高复用性

2、函数重载满足条件:

  • 同一个作用域下(如全局作用域)
  • 函数名称相同
  • 函数参数 类型不同 或者 个数不同 或者 顺序不同

测试代码

#include <iostream>

using namespace std;

/*-----1、参数类型不同-----*/
//重载函数1.1
void func(int a)
{
	cout << "函数func() 的调用,参数类型为int型(参数类型不同)" << endl;
}

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

/*-----2、参数个数不同-----*/
//重载函数2.1
void func()
{
	cout << "\\n函数func() 的调用,无参数(参数个数不同)" << endl;
}
// 重载函数2.2
void func(int a, int b)
{
	cout << "函数func(int a, int b) 的调用,有2个参数(参数个数不同)" << endl;
}

/*-----3、参数顺序不同-----*/
// 重载函数3.1
void func(int a, double b)
{
	cout << "\\n函数func(int a, double b) 的调用,先int,后double(参数顺序不同)" << endl;
}

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

int main()
{
	//1、参数类型不同
	func(10);
	func(1.5);

	//2、参数个数不同
	func();
	func(10, 10);

	//3、参数顺序不同
	func(10, 1.5);
	func(1.5, 10);

	return 0;
}

输出结果

函数func() 的调用,参数类型为int型(参数类型不同)
函数func(double a) 的调用,参数类型为double型(参数类型不同)

函数func() 的调用,无参数(参数个数不同)
函数func(int a, int b) 的调用,有2个参数(参数个数不同)

函数func(int a, double b) 的调用,先int,后double(参数顺序不同)
函数func(double a, int b) 的调用,先double,后int(参数顺序不同)

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

#include <iostream>

using namespace std;

void func(int a)
{
	cout << "返回值类型为void" << endl;
}

int func(int a)		//报错!无法重载仅按返回值类型区分的函数
{
	cout << "返回值类型为int" << endl;
}

int main()
{
	func(10);
	
	return 0;
}

在这里插入图片描述

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, int b) 的调用" << endl;
}

void func2(int a)
{
	cout << "函数func2(int a) 的调用" << endl;
}

int main()
{
	// 1、引用作为函数重载的条件
	int a = 10;
	const int b = 10;

	func(a);	//调用的为函数func(int &a),因为a本身是一个变量,可读可写
	func(b);	//调用的为函数void func(const int &a),因为b本身是一个常量,只读
	func(10);	//调用的为函数void func(const int &a),const int &a = 字面量,合法
	
	// 2、函数重载碰到默认参数
	//func2(10); //出现二义性,报错,尽量避免重载函数中出现默认参数

	return 0;
}

输出结果

函数func(int &a) 的调用
函数func(const int &a) 的调用
函数func(const int &a) 的调用

以上是关于C++——函数重载的主要内容,如果未能解决你的问题,请参考以下文章

C++:如何为多个重载函数保留公共代码路径?

C++ 函数重载,函数模板和函数模板重载,选择哪一个?

C++——函数重载

c++核心编程--函数的重载

C++ 入门超详解!

C++ 入门超详解!