Abh*_*pta 9 c++ operator-overloading
我正在阅读C++ FAQ.在那里我发现操作符重载使用指南中有一点:
如果您提供构造性运算符,则它们应该允许提升左侧操作数(至少在类具有未使用explicit关键字标记的单参数ctor的情况下).例如,如果您的类Fraction支持从int到Fraction的提升(通过非显式ctor Fraction :: Fraction(int)),并且如果允许x-y用于两个Fraction对象,则还应允许42-y.在实践中,这仅仅意味着您的operator-()不应该是Fraction的成员函数.通常你会把它变成朋友,如果没有其他原因而不是强迫它进入公众:类的一部分,但即使它不是朋友,它也不应该是成员.
为什么作者写了operator-()不应该是成员函数?
如果我将operator-()作为成员函数以及其他后果会有什么不良后果?
K-b*_*llo 16
以下是Fraction运算符作为成员函数:
class Fraction
{
Fraction(int){...}
Fraction operator -( Fraction const& right ) const { ... }
};
Run Code Online (Sandbox Code Playgroud)
有了它,这是有效的代码:
Fraction x;
Fraction y = x - 42;
Run Code Online (Sandbox Code Playgroud)
和它相当于x.operator-( Fraction(42) ); 但这不是:
Fraction z = 42 - x;
Run Code Online (Sandbox Code Playgroud)
因为42没有成员函数operator -在它(当然,它甚至不是一个类).
但是,如果您将运算符声明为自由函数,则转换操作将应用于其两个参数.所以这
Fraction z = 42 - x;
Run Code Online (Sandbox Code Playgroud)
变成这个
Fraction z = Fraction(42) - x;
Run Code Online (Sandbox Code Playgroud)
这相当于operator-( Fraction(42), x ).
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |