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

[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] 该从外(接口优先)还是从内(数据优先)设计类?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值