函数重载

四、重载:

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、当匹配的规则冲突时,当有多个匹配时,二义性出现。

posted @ 2017-05-04 09:42  _xiaohaige  阅读(234)  评论(0编辑  收藏  举报