观察上例,对 s1 + Constent 这样的表达式,编译器又.pptVIP

  • 2
  • 0
  • 约8.02千字
  • 约 27页
  • 2018-11-11 发布于江苏
  • 举报

观察上例,对 s1 + Constent 这样的表达式,编译器又.ppt

观察上例,对s1Constent这样的表达式,编译器又

观察上例,对于 s1 + Constent 这样的表达式,编译器又如何解释呢?String 类中并没有定义 operator + (char*) 这样的运算符重载呀!执行这样的表达式,仍然调用的是类中所定义的加法运算符重载。 当编译器遇到上述一个对象加一个串常量的表达式时,就试图找到一个 operator + (char*) 这样的运算符重载或者与表达式最为匹配的运算符重载。若找不到,它并不急于报错,而是试图利用类中已有的运算符重载 operator + (String) 来匹配这一表达式。然而,该函数中的参数是一个串对象的引用,而不是字符串常量,类型不匹配。这时,编译器就会查找类的构造函数,看是否存在一个 String(char*) 这样用 C 串来创建串对象的构造函数。若存在,则通过该构造函数用常串创建一个临时的对象,以满足加法运算符重载的要求。 实用中,再重载一个 operator + (char*) 将可以避免许多麻烦。但最佳选择还是使用友元运算符。 12.1.3 友元运算符 除了以下 5 种运算符,所有的运算符重载都可以是类的友元函数: = ( ) [ ] - type 其中:= 包括所有的复合赋值运算符;( ) 为函数调用运算符;[ ] 为下标运算符;- 为用于指针的成员访问运算符;而 type则是任一合法的数据类型,这样的运算符重载叫做转换函数(

文档评论(0)

1亿VIP精品文档

相关文档