函数重载简单的来说,就是同名的函数,但需要满足三点条件:
1.函数名相同
2.作用域相同 :如下面例子就都在这个.c文件的全局作用域,后面涉及到类,namespace时,重载则必须在一个类或者namespace里面
3.参数类型不同。
有以下例子中一般情况可自行验证。但当参数为引用时,细微的写法不同导致的结果会不同,如以下的int a = 10; func(a);和func(10);这两种情况执行的重载函数是不同的。 传入10相当于传入一个不可变的值。所以需要参数类型为const,而传入a则为普通的引用。不用为const,需要格外注意。
#include "iostream"
using namespace std;
//函数重载:函数名相同
//同一个作用域 函数名相同 参数不同 (int/void) (int/float)
/********************一般情况*********************/
void func()
{
cout << "func的调用11" << endl;
}
//void func(int a)
//{
// cout << "func的调用22" << endl;
//}
void func(double a)
{
cout << "func的调用33" << endl;
}
/********************当参数为引用*********************/
void func(int& a) //func(10);这种语法无效,因为int &a=10;是错误的,a不知道指向那一片内存。
{
cout << "func的调用44" << endl;
}
void func(const int& a) //const int &a = 10;
{
cout << "func的调用55" << endl;
}
int main()
{
func(); //输出11这种情况
//func(3); //输出22这种情况,不可与下面的输出44 55同时定义
func(3.1);//输出33这种情况
int a = 10;
func(a);//输出44这种情况
func(10);//输出55这种情况
system("pause");
return 0;
}