[C/C++]_[操作符重载operator type()和operator()的区别]
来源:互联网 发布:预算编制软件 编辑:程序博客网 时间:2024/05/19 04:53
场景:
1.看到WTL的CWindow源码时会发现这样的operator重载,仔细看会发现它并不是重载()操作符.
operator HWND() const throw(){return m_hWnd;}
如果重载()操作符,应该是,返回值HWND应该在operator的左边,而且应该有两个括号()
HWND operator ()() const throw(){return m_hWnd;}
这种类型的操作符重载应该是type conversion operator(类型转换操作符),它可以把类类型转换为指定的类型,如果定义了这种转换,好处就是该类对象赋值给 method(HWND),参数是HWND类型的方法时会自动转换为HWND类型,或者需要打印这个类信息时。operator std::string().
函数原型:
operator Type()
而重载()操作符确实是需要调用()才会调用,比如object([param])。
测试代码:
#include <iostream>#include <string>#include <string.h>#include <stdlib.h>#include <stdio.h>using namespace std;class Total{public:Total(float sum,float discount){sum_ = sum;discount_ = discount;}~Total(){}operator float(){return sum_* discount_;}operator std::string(){char str[128];sprintf(str,"%f",sum_* discount_);return std::string(str);}float operator()(){return sum_* discount_;}float sum_;float discount_;};int main(int argc, char const *argv[]){Total to(89,0.8);cout << to << endl;cout << to() << endl;cout << (std::string)to << endl;//cout << to(0.9) << endl;return 0;}
输出:
71.271.271.200001
0 0
- [C/C++]_[操作符重载operator type()和operator()的区别]
- C++,重载输出操作符<<, cout.operator()
- 【C++】operator关键字(重载操作符)
- 奇怪的C++operator重载
- C++operator重载问题
- [C++]operator--重载
- c++---operator重载++,--
- operator new和 new operator的区别(More Effective C++_8(运算符))
- C++,重载输出操作符<<, cout.operator()是什么东东?
- C++ operator关键字(重载操作符)
- C++ operator关键字(重载操作符)
- operator 操作符重载
- 重载operator操作符
- 重载->和*操作符之operator->()与operator*()
- c++operator new/new operator、operator delete/delete operator的区别与联系
- C++ 类型转换操作与操作符重载 operator type() 与 type operator()
- 2.c++-重载运算符operator
- C++ 操作符重载 operator = 、operator <
- IOS忽略-Warc-performSelector-leaks警告
- redis中的opsForSet操作
- NYOJ 814 又见拦截导弹
- 关于STM32GPIO口配置命令
- struts2自定义类型转换
- [C/C++]_[操作符重载operator type()和operator()的区别]
- RMI原理及实现
- Openfire插件
- 开发SDK时需要注意的问题
- iOS 6 新特新CollectionView的使用实现九宫格
- XDOJ1185 - 钟爱的数字
- MVC中“The model backing the '***Context' context has changed since the database was created. ”的问题处理
- Java深入学习(2)——参数传递
- Socket(Tcp)通信服务端