当前位置:主页   - 电脑 - 程序设计 - C/C++
C++的算符重载
来源:网络   作者:   更新时间:2012-02-14
收藏此页】    【字号    】    【打印】    【关闭

  算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口。 算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的算符是函数调用的语法修饰:  

  class Fred {
  public:    // …
};
#if 0           // 没有算符重载:
Fred add(Fred, Fred);
Fred mul(Fred, Fred);
Fred f(Fred a, Fred b, Fred c)
{
  return add(add(mul(a,b), mul(b,c)), mul(c,a)); // 哈哈,多可笑…
}
#else   // 有算符重载:
Fred operator+ (Fred, Fred);
Fred operator* (Fred, Fred);
Fred f(Fred a, Fred b, Fred c)
{
  return a*b + b*c + c*a;
}
#endif

  算符重载的好处是什么?

  通过重载类上的标准算符,你可以发掘类的用户的直觉。使得用户程序所用的语言是面向问题的,而不是面向机器的。 最终目标是降低学习曲线并减少错误率。

  有什么算符重载的实例?这里有一些算符重载的实例:

  myString + yourString 可以连接两个 std::string 对象

  myDate++ 可以增加一个 Date 对象

  a * b 可以将两个 Number 对象相乘

  a[i] 可以访问 Array 对象的某个元素

  x = *p 可以反引用一个实际“指向”一个磁盘记录的 "smart pointer" —— 它实际上在磁盘上定位到 p 所指向的记录并返回给x。

  但是算符重载使得我的类很丑陋;难道它不是应该使我的类更清晰吗?算符重载使得类的用户的工作更简易,而不是为类的开发者服务的! 考虑一下如下的例子:

  class Array {
  public:
int& operator[] (unsigned i);
};
inline
int& Array::operator[] (unsigned i)
{   // …
}

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明