【C++】函数的重载

        在生活中自然语言中同一个词可以代表许多种不同的含义,这要依赖上下文来确定。这就是所谓的一词多义,词的重载。例如:人们可以说洗衣服,洗汽车。因为通常认为“ 洗”这个动作具有具有一定的共性,即使该动作执行的对象不同,人们也能够自然理解。

         在C++中允许用一个函数名来表达这些功能相同、只是操作类型不同的函数,即函数重载,函数重载的实质就是允许功能相同,但函数参数或函数类型不同的函数采用同一个函数名。从而在编译器的帮助下,能够用一个函数名访问一组相关的函数。下面来具体看看什么是函数重载:


1、概念


       函数重载就是指同一个函数名可以对应着多个函数的实现,即这些函数名是相同的,但是它们的形参的个数和类型却不同,编译器能够根据它们各自的实参和形参的类型以及参数的个数进行最佳匹配,自动决定调用哪一个函数体。


2、重载函数的条件


参数类型或参数个数不同。
返回值不同不能视为重载。
是否为常函数不能视为重载
对于普通类型参数只有const、volatile区别不能视为重载,但是如果参数是指针或 引用类型,那么const、volatile的区别视为重载。


3、重载与域


重载函数集合中的全部函数都应在同一个域中声明,一个声明为局部的函数将隐藏而不是重载一个全局域中声明的函数。
最常见的例子就是继承关系中的子类声明和父类同名的函数,这不是重载,


4、函数重载的优点:


(1)试想如果没有函数重载机制,如在C++中,必须要这样去做:为这个print函数取不同的名字,如print_int、print_string。这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型、char*、各种类型的数组等等。这样做很不友好!
(2)类的构造函数跟类名相同,也就是说:构造函数都同名。如果没有函数重载机制,要想实例化不同的对象,那是相当的麻烦!
(3)操作符重载,本质上就是函数重载,它大大丰富了已有操作符的含义,方便使用,如+可用于连接字符串等!


5、实例


编写3个名为add的重载函数,分别实现两个整数相加,两个实数相加,一个整数和一个实数相加、一个实数和一个整数相加的功能。

<strong><span style="font-size:18px;">/***************************************
*      程序名:函数重载.cpp
*      功能:函数的重载
***************************************/

#include <iostream>
using namespace std;

int add(int x, int y)
{
	cout << "(int,int)\t";
	return x + y;
}
double add(double x, double y)
{
	cout << "(double,double)\t";
    return x + y;
}
int add(int x, double y)
{
	cout << "(double,int)\t";
	return int(x + y);
}
double add(double x, int y)
{
	cout << "(double,int)\t";
	return x + y;
}
int main()
{
	cout << add(9, 8) << endl;
	cout << add(9.0, 8.0) << endl;
	cout << add(9, 8.0) << endl;
	cout << add(9.0, 8) << endl;
	return 0;
}</span></strong>

运行结果:




扩展:函数重载、覆盖与隐藏的区别


函数重载的特征:相同的范围内(在同一个类中),函数的名称相同,参数列表不同,virtual关键字可有可无;函数覆盖的特征:在不同的范围内(父类与派生类),函数的名字相同,参数列表相同,父类函数必须有关键字virtual;函数隐藏的特征:在不同范围内(父类与派生类),函数的名字相同,参数列表相同,但是父类函数没有关键字virtual或者,参数列表不相同,父类函数中virtual关键字可有可无。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值