看上去好坑的运算符重载
程序员文章站
2022-03-26 16:52:47
...
看上去好坑的运算符重载
2021春季学期面向对象程序设计第五、六周课外练习
描述
程序填空
#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;
}
输入
多组数据,每组一行,整数n
输出
对每组数据,输出一行,包括两个整数, n-5和n - 8
输入样例
20
30
输出样例
15,12
25,22
解析
MyInt
定义了一个类,objInt
是其实例化的一个变量,在objInt-2-1-3
这个操作中,需要实现一个减法的功能,所以要在MyInt
这个类中重载-
这个运算符号,即:
MyInt& operator -(int a)
{
nVal -= a;
return *this;
}
其次,在Inc(int n)
这个函数中,传入的变量是 int
类型,而主函数中cout<< Inc(objInt)
传入的是MyInt
类型,所以还要在MyInt
这个类中定义从MyInt
到int
的强制类型转换,即:
operator int()
{
return nVal;
}
最后,完整代码为:
#include <iostream>
using namespace std;
class MyInt
{
int nVal;
public:
MyInt( int n) { nVal = n ;}
// 在此处补充你的代码
MyInt& operator -(int a)
{
nVal -= a;
return *this;
}
operator int()
{
return nVal;
}
};
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;
}