C++:函数重载:函数重载深入解析

本文介绍了C++中的函数重载概念,通过实例展示了如何为不同数据类型(整数、浮点数、双精度数)编写求绝对值的重载函数。在C++中,函数重载允许通过参数个数、类型或顺序来区分同名函数。在调用重载函数时,编译器会根据传入的参数自动选择合适的函数。需要注意的是,仅依赖返回值类型不能作为重载的依据,且避免因类型转换导致的数据丢失或错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重载定义:

    在 C++中,我们把具备相同功能的函数整合都一个函数上,而不必去写好多个函数名不同 的函数,这就 叫函数重载。

实作举例

    比如我们要编写一个函数求一个数的 绝对值(但是整数,浮点型数,双精度型数)都有绝对值,但是我们为他们编写的函数返回值类型却是各不相同的比如:

int iabs(int a);
float fabs(float a);
double dabs(double a);

// main.cpp


##include<iostream>
using namespace std;

int abs(int a); // 当参数为整型数据 时的函数原型
float abs(float a);//当参数为浮点型数据时的函数原型
double abs(double a);//当参数为双精度型数据时 的函数原型


// 定义函数

int abs(int a) {
	// 打印调用了哪个函数
	cout << "call:int abs()" << endl;
	return (a >= 0 ? a : -a);
}

float abs(float f) {
	cout << "call:float abs()" << endl;
	return (f >= 0 ? f : -f);
}

double abs(double d) {
	cout << "call:double abs()" << endl;
	return (d >= 0 ? d : -d);

}

int main() {

	int a = -5;
	float f = -2.4f;
	double d = -3e-6;

	// 输出函数的结果
	cout << "a= " << abs(a) << endl;
	cout << "f= " << abs(f) << endl;
	cout << "e= " << abs(d) << endl;
}

 

 结论:

运行结果表明:abs函数能够处理三种不同数据类型的数据,那么我们应该怎样编写重载函数了 ?

1:同一个函数写上多种函数原型 

2:给这些函数写上定义

3:编译器依靠函数声明时参数个数,参数数据类型,参数顺序来判断到底运行那个函数,如果重载函数参数表完全相同,编译器是找不到到底运行哪个函数的,这个时候,程序就会报错。比如:int func(int a,char b) 和  float func(int a,char c) 这是不能重载的,在语法上就不能通过,直接报错:不能重载,仅依靠函数的返回值。

4:但是 在调用一个函数重载的时候,也可能会发生找不到一个完全合适的函数,这时候,就需要进行数据类型的 转换 ,但是由于这种方法可能导致数据丢失或者数据类型不严格符合 而报错,所以这种情况应该尽量避免。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值