欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

程序设计实习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;
    }

问题解决了~

有不足之处请指出!