首页 > 代码库 > 【Cpp】考点·函数重载

【Cpp】考点·函数重载

 一、什么是函数重载

函数重载(overloaded)是指,在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数。这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

举个栗子

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void print(int i)
 5 {
 6     cout << "print a integer: " << i << endl;
 7 }
 8 
 9 void print(string str)
10 {
11     cout << "print a string: " << str << endl;
12 }
13 
14 int main()
15 {
16     print(12);
17     print("HELLO");
18     return 0;
19 }

通过上面的代码实现,可以根据print的参数去决定调用print(int)还是print(string)。

如果没有函数重载机制,上述的函数需要进行不同的命名,使用时也需要进行区别。这样很不友好。

类的构造函数跟类名相同,也就是说:构造函数都同名。如果没有函数重载机制,想要实例化不同的对象很麻烦。

操作符重载本质上就是函数重载。

 二、重载函数的调用匹配

按照依次按照以下规则来判断

  • 精确匹配:参数匹配而不做转换,或者只是形式上的转换,如数组名到指针、函数名到指向函数的指针、T到const T;
  • 提升匹配:即整数提升(如bool到int、char到int、short到int、float到double;
  • 使用标准转换匹配:(如int到double、double到int、double到long double、Derived *到Base *、 T*到void*、int到unsigned int;
  • 使用用户自定义匹配
  • 使用省略号匹配:类似pringf中省略号参数

09:49:10  函数重载