您的位置:首页 > 编程语言 > C语言/C++

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

2013-08-28 23:48 369 查看

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

[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" —— 它实际上在磁盘上定位到 p 所指向的记录并返回给x。 

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

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

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

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

不行。
运算符的名称、优先级、结合性以及元数都是由语言固定的。在C++中没有operator**,因此你不能为类类型创建它。
如果还有疑问,考虑一下x ** y与x * (*y)等同(换句话说,编译器假定 y 是一个指针)。此外,运算符重载只不过是函数调用的语法修饰。虽然这种特殊的语法修饰非常美妙,但它没有增加任何本质的东西。我建议你重载pow(base,exponent)(双精度版本在<cmath>中)。
顺便提一下,operator^可以成为幂运算,只是优先级和结合性是错误的。
如何创建operator^重载呢?

 Matrix(const Matrix& m);               // 拷贝构造函数

 Matrix& operator= (const Matrix& m);   // 赋值运算符

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ FAQ