程序设计实习MOOC / 程序设计与算法(三)第04周测验(2020春季) 002:看上去好坑的运算符重载
程序员文章站
2024-03-17 18:45:28
...
放上题目:
#include <iostream>
using namespace std;
class MyInt
{
int nVal;
public:
MyInt( int n) { nVal = n ;}
// 在此处补充你的代码
};
int Inc(int n) {
return n + 1;
}
int main () {
int n;
while(cin >>n) {
MyInt objInt(n);
objInt-2-1-3;
cout << Inc(objInt);
cout <<",";
objInt-2-1;
cout << Inc(objInt) << endl;
}
return 0;
}
这题主要考察运算符的重载,而这里面比较难的点就是运算符“-”的连续运算,还有另一点比较坑的一点,就是函数传替形参时该怎么把MyInt类型转换成int类型。
先看第一点,我们首先重载“-”这个运算符,为了保证其可以连续运算,我们返回类型必须是MyInt的引用类,这样才能保证每次运算的时候都是objInt这个对象在被“-”运算。
上代码:
MyInt & operator-(int n) {
this->nVal = this->nVal - n;
return *this;
}
注:*this指针这里是指返回这个对象本身的引用。
第二个问题,这个算是一个小坑,题目中将objInt这个对象直接放到Inc函数中隐藏了一个强转变化:n = (int)objInt;所以我们需要重载(int)这个运算符,根据重载运算符的规则:
operator int () {
return nVal;
}
问题解决了~
有不足之处请指出!