operator运算符的重载问题
来源:互联网 发布:大阪 知乎 编辑:程序博客网 时间:2024/05/22 02:28
从侯捷老师的书上看到,如果重载运算符作为成员函数在类内定义的话,会出现一些问题,比如在类内定义了: T operator+(const T &)const 由于是类内的成员函数,使用时:T t1(10) ; t1=t1+3 ; 这种使用不会出现问题,调用等效于t1.operator+(3),至于原因,我只说一下结论,当参数被列与参数列内,这个参数才是隐式类型转换的合格参与者。类会为2建立一个临时T对象,当然前提是这个只涉及到non-explicit构造函数。
#include<iostream>using namespace std;class fraction { int a;public: fraction(int _a) :a(_a) {} fraction() {}; int num()const { return a; } void print() { cout << a; }};const fraction operator+(const fraction &_a,const fraction &_b) { return fraction(_a.num() + _b.num());}int main(void) { fraction a(1); fraction b; b = a + 2; b.print(); b = 2 + a; b.print(); system("pause"); return 0;}
——————————————2017.12.18更新—————————————–
加入一句话:
始用函数重载来消除类型转换,你就有可能这样声明函数,把自己陷入危险之
中:
const UPInt operator+(int lhs, int rhs); // 错误!
这个想法是合情合理的。对于 UPInt 和 int 类型,我们想要用所有可能的组合来重载
operator 函数。上面只给出了三种重载函数,唯一漏掉的是带有两个 int 参数的 operator,
所以我们想把它加上。
有道理么?在 C++中有一条规则是每一个重载的 operator 必须带有一个用户定义类型
(user-defined type)的参数。int 不是用户定义类型,所以我们不能重载 operator 成为
仅带有此[int]类型参数的函数。(如果没有这条规则,程序员将能改变预定义的操作,这样
做肯定把程序引入混乱的境地。比如企图重载上述的 operator,将会改变 int 类型相加的
含义。)
阅读全文
0 0
- operator运算符的重载问题
- 运算符的重载 operator
- operator重载运算符
- operator 运算符重载
- operator运算符重载
- operator重载运算符
- C++运算符重载(operator)
- C++重载运算符operator
- 运算符重载之operator
- 运算符重载Operator Overloading
- C++ operator运算符重载
- C++运算符重载:operator
- cout 堆栈,operator<< 运算符重载输出问题
- 运算符重载 编程题#3(专项课程3;重载:* operator, & operator=, & operator(); 函数 memcpy 的使用)
- 关于 C# 自增运算符(operator ++)的重载
- 二十、运算符重载(四) Integer类改进、类型转换运算符重载、 ->运算符重载、 new的三种用法、operator new、operator delete重载
- 2.c++-重载运算符operator
- C++中重载间接运算符(operator->())
- 每天一个linux命令-find之xargs(6)
- 大话设计模式之适配器模式
- MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(3)移动图形的绘制
- JS(原型链)
- 并查集奇妙应用-机房模拟赛某题-同BZOJ4569
- operator运算符的重载问题
- java 泛型
- eclipse配置server locations及工程发布后文件位置总结
- Mybatis 之 ResultSetHandler
- View中inflate方法
- Python的方法解析顺序(MRO)
- SPOJ NSUBSTR Substrings
- bzoj3991 [SDOI2015]寻宝游戏 (虚树+set+dfs序 )
- 加帕里的聚会 (树链剖分 双标记线段树)