C++基础学习之函数重载的简单介绍

2020-01-06 20:17:15王振洲

A program shall contain a global function called main, which is the designated start of the program....
This function shall not be overloaded.

试想如果作为用户程序入口函数的main函数被重载了,那么加载的时候该以哪个为入口呢?

只有返回值不同

例如下面两个声明只有返回值不同,函数名和形参都相同:


double calcArea(const Square&);
int calcArea(const Square&); //非法,仅有返回值不同,不可重载
/*以上声明同时出现会报错*/

试想一下,当你传入Square类型参数,而不去使用返回值时,应该调用上面的哪个函数呢?

形参列表看似不同,实则相同

例如使用typedef给Triangle起了一个“别名”:


typedef Triangle MyTri;
double calcArea(const Triangle&);
double calcArea(const MyTri&);
/*以上声明同时出现会报错*/

上面这种情况的形参看似不一样,本质上来说它们并没有什么不同。

形参名不同

例如:


double calcArea(const Circle &circle );//形参名为circle
double calcArea(const Circle& cir);//形参名为cir
double calcArea(const Circle& );//省略形参名
/*以上声明同时出现会报错*/