函数重载
四、重载:
4.1、 重载基本习惯:
4.1.1、 单目运算符重载为成员函数。
4.1.2、 双目运算符重载为友元函数。(=、()、[]、-> 无法重载为友元函数)
4.1.3、 类型转换运算符只能重载为成员函数。
4.1.4、 流运算符只能以友元方式重载。
对“<<”和“>>”重载的函数形式如下: istream & operator >> (istream &, 自定义类 &); ostream & operator << (ostream &, 自定义类 &);
4.2、不可重载运算符: ::(域运算符) 、? : (三目运算符)、.(直接成员访问运算符)、 sizeof 运算符。*.
4.3、根据业务需求来选择重载。
4.5、重载只和函数名和参数列表有关系,和返回值没有关系。
比如:
void MyCon(char* str){ printf("%s\n", str); }
和
int MyCon(char* str, char y){ printf("%s\n", str); return 0; }
这两个是重载关系。因为这个两个函数的,函数名相同、参数列表不同。
但是下面这两个不是重载关系,因为下面这两个的函数名和参数列表都相同,
void MyCon(char* str){ printf("%s\n", str); }
和
int MyCon(char* str){ printf("%s\n", str); return 0; }
4.6、参数顺序不同也是可以重载的。
4.7、是否符合命名规则, 就能看出是否能构成重载。
4.8、重载参数的匹配规则:
4.8.1、精准匹配 int -> int
4.8.2、提升匹配 char -> int float -> double
4.8.3、类型转换的匹配 int -> unsigned int, (但是反过来不行)
4.8.4、当匹配的规则冲突时,当有多个匹配时,二义性出现。