现在的位置: 首页 > 综合 > 正文

C++ FAQ学习笔记 13 章 运算符重载

2017年12月18日 ⁄ 综合 ⁄ 共 919字 ⁄ 字号 评论关闭
文章目录

[13.3] 有什么运算符重载的实例?UPDATED!

[Recently changed so it uses the std:: syntax (on 7/00). Click here to go to the next FAQ
in the "chain" of recent changes
.]

这里有一些运算符重载的实例:

  • myString + yourString 可以连接两个 std::string 对象
  • myDate++ 可以增加一个 Date 对象
  • a * b 可以将两个 Number 对象相乘
  • a[i] 可以访问 Array 对象的某个元素
  • x = *p 可以反引用一个实际“指向”一个磁盘记录的 "smart pointer" —— 它实际上在磁盘上定位到 所指向的记录并返回给x。 


[13.5] 什么运算符能/不能被重载?

大多数都可以被重载。C的运算符中只有 . 和 ? :(以及sizeof,技术上可以看作一个运算符)。C++增加了一些自己的运算符,除了::.*,大多数都可以被重载。

这是一个下标 运算符的示例(它返回一个引用)。先没有运算符重载:

[13.7] 我能为“幂”运算创建一个 operator** 吗?

不行。

运算符的名称、优先级、结合性以及元数都是由语言固定的。在C++中没有operator**,因此你不能为类类型创建它。

如果还有疑问,考虑一下x ** yx * (*y)等同(换句话说,编译器假定 是一个指针)。此外,运算符重载只不过是函数调用的语法修饰。虽然这种特殊的语法修饰非常美妙,但它没有增加任何本质的东西。我建议你重载pow(base,exponent)(双精度版本在<cmath>中)。

顺便提一下,operator^可以成为幂运算,只是优先级和结合性是错误的。

如何创建operator^重载呢?

 Matrix(const Matrix& m);               // 拷贝构造函数
 Matrix& operator= (const Matrix& m);   
// 赋值运算符


[13.9] 为什么Matrix(矩阵)类的接口不应该象数组的数组?

为什么那样写呢?返回引用和返回值的区别?


[13.10] 该从外(接口优先)还是从内(数据优先)设计类?

抱歉!评论已关闭.