a+++b
来源:互联网 发布:八维网络工程学院 编辑:程序博客网 时间:2024/06/06 08:50
师兄考我的一个问题:
先看下面的这一个类的功能实现,++表示将类的数据的每一位都+1,不进位处理,返回一个整数(处理后的数据), +表示两个类相加,将其每一位都相加,同样不进位处理,返回计算结果为整数。
代码实现:
testmain.cpp:
#include <iostream>#include "strange_plus.h"using namespace std;int main() { integer a, b; int t1, t2, ans; t1 = a + b; t2 = ++a; cout << t1 << endl; cout << t2 << endl; ans = a+(++b); cout << ans << endl; return 0;}strange_plus.h:
#include <string.h>class integer { public: integer() { data = 1; } ~integer() {} friend int operator + (const integer i1, const integer i2) { int temp1 = i1.data; int temp2 = i2.data; int temp3 = 0; int ans = 0; while (temp1 || temp2) { temp3 = temp3 * 10 + ((temp1 % 10 + temp2 % 10) % 10); temp1 /= 10; temp2 /= 10; } while (temp3) { ans = ans * 10 + temp3 % 10; temp3 /= 10; } return ans; } int operator ++ () { int temp[10]; memset(temp, 0, sizeof(temp)); int temp_int = data; int i = 0; while (temp_int) { temp[i++] = temp_int % 10; temp_int /= 10; } for (int j = 0; j < i; j++) { temp[j] = (temp[j] + 1) % 10; } int ans = 0; for (int j = i - 1; j >= 0; j--) { ans = ans * 10 + temp[j]; } data = ans; return ans; } private: int data;};然后报错了,看错误信息:
看的不是很懂,但是发现一个挺奇怪的地方,假如在strange_plus.h中加上这个:integer(int temp) {data = temp;}
就可以运行了:
分析如下:
首先对于a+(++b),先算好了++b,返回一个整数,对与这个整数,它是无法和类相加的,而添加了integer(int temp) {data = temp;}这一段代码之后,就可以将整数转成类,进行相加;
其实这个现象就是函数的静态绑定规则,之前也讲过:
这里就是第三步了,这么看来,构造函数integer(int temp) {data = temp;}相当于强制转化了。
同样的,假如++改成后置的,a+(++b)改成a+++b也是这样考虑的,注意到优先级:后置++ > 前置++ = +,即+和前置++的优先级是一样的,但是都比后置++低。
0 0
- a>b?a:b
- a+b
- a+++b
- A + B
- A+B
- A+B
- {A} + {B}
- a+++b
- A+B
- A-B
- A+B
- A + B
- A|B?
- A+B
- A + B
- A+B
- A + B
- A+B
- 大四最后一个学期去公司实习前2天的一点感悟
- 单例模式的几种写法(包含双检锁写法)
- 2、论述rfid与物联网关系。
- rpm:RPM should not be used directly install RPM packages, use Alien instead!
- 深入理解Java内存模型(三)——顺序一致性
- a+++b
- SoapUI
- java比较两个日期大小
- sorting - select sort
- struts2 返回json数据
- JS动态增加行
- 欢迎使用CSDN-markdown编辑器
- Effective STL第十九节 相等和等价的区别
- phpbb数据库找回root密码