首页 > 代码库 > [C/C++]_[操作符重载operator type()和operator()的区别]
[C/C++]_[操作符重载operator type()和operator()的区别]
场景:
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.2 71.2 71.200001
[C/C++]_[操作符重载operator type()和operator()的区别]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。