重载操作符和函数对象

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  1.重载操作符跟重载函数一样的,只不过要区分成员的和非成员的

  成员的重载操作符,第一个参数默认了是this 指针形参,所以重载操作符作为成员函数,都应该是右操作符

  比如:

  ostream& operator<<(ostream &out)  //右操作运算符  调用方式:Screen s;s<<std::cout;

  {

  out<<'('<<height<<','<<width<<')'<<*(pContents)<<std::endl;

  return out;

  }

  friend ostream& operator<<(ostream& out,Screen& s) //友原函数的重载操作符

  {

  out<<'('<<s.height<<','<<s.width<<')'<<*(s.pContents)<<std::endl;

  return out;

  }

  上述一个成员,一个非成员重载方式,调用相应如下:

  s1<<std::cout; // 调用的是作为成员函数的重载操作符

  std::cout<<s2; //调用的是友原函数

  2.至于返回值,值得注意的地方是:

  何时返回类型的引用值何时返回类类型,应该跟内置的操作符一致;

  比如+=返回引用,+则应该返回类类型本身。

  如下:

  Screen& operator+=(Screen& rhs)  //复合赋值操作符

  {

  height += rhs.height;

  width  += rhs.width;

  *pContents += *(rhs.pContents);

  return *this;

  }

  friend Screen operator+(Screen& s1,Screen& s2 )

  {

  Screen s;

  s.width = s1.width+s2.width;

  s.height = s1.height+s2.height;

  *(s.pContents) = *(s1.pContents)+*(s2.pContents);

  return s;

  }

  //可以两种方式调用:

  Screen s0,s1,s2;

  s0=s1+s2;  //隐式调用

  //或者

  s0=operator+(s1,s2);//我理解为显式调用

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答