C++运算符重载(6) 重载转换操作符
来源:互联网 发布:微赞是什么样的软件 编辑:程序博客网 时间:2024/06/06 04:13
类型转换符采用通用形式:
operator /*重载类型*/() {/*内容*/}
对任何可作为函数的返回类型(除了void之外),都可以进行重载
不允许转换为数组或函数类型,转换为指针类型以及引用类型是可以的
operator int(Small Int& ); // error:nonmemberclass SmallInt{public:int operator int(); // error: return listoperator int(int = 0); // error:parameter list// ...};
这个例子中有三个错误
(1)转换函数必须为成员函数
(2)类型转换不能有形参
(3)类型转换不能有返回值
虽然转换函数不能指定返回的类型,但是每个转换函数必须显示地返回一个指定的值
比如operator int() 返回int类型的值, operator sales_item() 返回sales_item类型的值
转换操作符的使用:
class Interger {private:int data; public:Interger(int v) { data = v;}////重载赋值操作符 可以实现把int类型赋值赋给interger类型Interger& operator = (const int& v) {data = v;return *this; //返回Interger对象}//类型转换操作符:在把interger类型赋值给int类型时 先会隐式地把interger类型转为int类型 再赋给intergeroperator int() {return data;}//取数据int getData() {return data;}};
重载=: 可以实现(interger) a = (int) b
重载转换符int: 当(int) b = (interger) a 时, 先会把赋值符右边的a从interger转为int,再把a赋值给b
重载int就实现了两个变量之间的赋值
int main() {int a = 0;Interger b(10);b = a;cout << b.getData() << endl;system("PAUSE");return 0;}
再来看一个特殊的例子:
#include <iostream> #include <cmath> using namespace std; class Complex { private: double real; double imag; public: // 默认构造函数 Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} // 求复数的绝对值 double mag() { return getMag(); } // 转换操作符 operator double () { return getMag(); } private: // get magnitude double getMag() { return sqrt(real * real + imag * imag); } }; int main() { // 定义一个复数对象 Complex com(3.0, 4.0); // 打印magnitude,可以使用下面的两种方法 //方法1 cout << com.mag() << endl; //方法2 cout << com << endl; }
这里的方法2为什么也会显示和方法1一样的内容呢
com是一个Complex类型, cout<<com<<endl是不被允许的
但重载转换操作符double后 com会先从Complex型转为double类型 再被输出流输出
但是应该避免方法2,方法2容易出错.
阅读全文
0 0
- C++运算符重载(6) 重载转换操作符
- C++运算符重载(6) - 转换操作符
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- js实现查询 添加 排序功能
- 普通程序员如何入门深度学习?
- SystemInfo获取设备系统参数
- 安卓handler消息机制源码解析
- S5PV210开发 -- 串口驱动开发
- C++运算符重载(6) 重载转换操作符
- HTML5 data-* 自定义属性
- Request操作类
- Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接
- IPFS 入门笔记
- iOS图片的填充方式UIImageView(contentMode)有什么不同
- 代数发展简史
- HTTP与HTTPS的区别
- 分布式配置管理平台