2个同名成员函数,可以重载的是()?
Type * const this;
const Type * const this;
Type * this;
void fun(int a)和void fun(const int a); ——不可以重载。
二者实际上没有区别,因为函数调用的时候,存在形实结合的过程,所以不管有没有const都不会改变实参的值。
void fun(const char *a) 和void fun(char *a) ——可以重载
二者参数不同: 一个是“指向字符的指针”,另一个是“指向const char 的指针”。
void fun(char * const a) 和void fun(char * a) —— 不可重载
这个和上面的“int”类似。
(In C)传参类似赋值——parameter = argument,
在ANSI C 中有一句话,大意是“如果两个***作数是指针,但是限定符(qualifiers)不同,那么左边那个必须拥有‘所有右边那哥们拥有的限定符”。
上面那句话有点绕, 例如:
const char * ccp = char * cp —— 是对的;
反过来,char * cp = const char * ccp ——不对,需要显式转换。(根据我在linux上的实测,gcc只是Warning——discard 'const')
① double calculate(double); ② double calculate(double,double); ③ double calculate(double, int); ④ double calculate(int, double); ⑤ double calculate(int); ⑥ float calculate(float); ⑦ float calculate(double); ①⑥是函数重载,但是①⑦不是
相同函数名: 函数重载的关键在于具有相同的函数名,但不同的参数列表。参数列表包括参数的数量、类型和顺序。
函数签名: 函数的唯一标识由函数名和参数列表组成,这被称为函数的签名。不同的函数必须有不同的函数签名。
返回类型不是函数签名的一部分: 函数的返回类型不影响函数签名。因此,你可以有不同返回类型的重载函数,只要它们的参数列表不同。