Effective C++ 条款24
2015-06-27 16:26
176 查看
若所有参数皆需类型转换,请为此采用non-member函数
我们直奔主题如果你定义一个有理数类如下
class Rational{ public: Rational(int numerator=0, int denominator=1);//非explicit,允许隐式转换 const Rational operator*(const Rational& rhs); ....................... }; result=oneHalf*2;//正确,相当于oneHalf.operator*(2); result=2*oneHalf;//错误,相当于2.operator*(oneHalf);
我们可以看到
result=2*oneHalf;这句无法通过编译,因为编译器找不多这样一个函数。那为什么
result=oneHalf*2;这句话能通过编译?这是因为此时的类Rational可以进行隐式转换。
为了能执行
result=2*oneHalf;这句,我们可以定义一个非member函数,如下
const Rational operator*(const Rational& lhs, const Rational& rhs); result=oneHalf*2;//正确,相当于operator*(oneHalf,Rational temp(2)); result=2*oneHalf;//正确,相当于operator*(Rational temp(2),oneHalf);
相关文章推荐
- Date and Time in C++
- C++学习笔记2——引用
- c++中 dialog、bitmap等资源,由一个项目完全复制到另一个项目的方法
- 一点对C语言中跳过scanf语句的理解
- C++经典面试题(十)
- C语言实现封装
- C++学习笔记1——const
- 黑马程序员——C语言之格式化输出与字符串操作
- C++ string 与 int 等类型 的相互转换
- Sort()函数是c++一
- C语言按行读文件及字符串分割
- 第16章 C++标准模板库STL
- c++学习-字符串
- [C语言]进阶|指针与字符串
- c++中的静态成员
- C++数据访问声明的思考
- PY++ 自动将你的C++程序接口封装供python调用
- c++中的构造函数和析构函数
- Effective C++ Notes
- C++经典面试题(六)