+ -
当前位置:首页 → 问答吧 → 请叫高手一个基础问题,不用计算。是语法

请叫高手一个基础问题,不用计算。是语法

时间:2011-12-17

来源:互联网

是关于一个String 类的 复制操作符"="的重载

假设string 类私有部分是:
  private:
  char * str;
  int len
string & string::operator =(const string & st)
{
  if(this = & st)
  retrun * this;
  delete [] str;
  len = st.len;
  str = new char [len+1];
  strcpy(str, st.str);
  retrun * this  
}
....
....

那么有三个string类对象 s1, s2,s3;
我就可以这样操作 s1 =s2 =s3;

但是书上说的是复制操作符"=" 只能有类成员函数重载的嘛,
我认为应该s1.operator =(s2);这样的格式才对啊,为什么可以直接,s1=s2可以喃?

作者: zjxzjx54   发布时间: 2011-12-17

虽然我也不是很明白,但这里应该是编译器允许这样使用,为了方便吧...

作者: Johnkey_Chen   发布时间: 2011-12-17

引用楼主 zjxzjx54 的回复:我认为应该s1.operator =(s2);这样的格式才对啊,为什么可以直接,s1=s2可以喃?


如果只能写成函数调用的形式,那还叫做操作符么?

作者: yisikaipu   发布时间: 2011-12-17

C/C++ code
s1=s2;

编译器会为你解释为
C/C++ code
s1.operator=(s2);


C++编译器在编译中遇到操作符时会去检查该操作符是否被使用对象的类重载或全局重载

作者: keven1868   发布时间: 2011-12-17

你用的是C++里的运算符重载,看看书上关于运算符重载的说明,其实当你重载运算符“=”以后:s1.operator=(s2); 和 s1=s2 ;
意义是一样的。

作者: d694671439   发布时间: 2011-12-18

建议看一下C++primer上关于操作符重载那一章节你就会清楚
a.operator=(b);等价于a=b;

作者: qscool1987   发布时间: 2011-12-18

楼主真纠结,有些东西就像 1+1=2 一样,,,记住就可以了,,,

作者: cl_gamer   发布时间: 2011-12-18