18.03.17 运算符重载作业
A:看上去好坑的运算符重载
描述
程序填空
#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
来源Guo Wei
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 MyInt& operator -(int a){ 2 nVal-=a; 3 return *this; 4 } 5 operator int () { 6 return nVal; 7 }
木有看到Inc函数是给定的,找了好久错在哪TuT
B:惊呆!Point竟然能这样输入输出
描述
程序填空
#include <iostream> using namespace std; class Point { private: int x; int y; public: Point() { }; // 在此处补充你的代码 }; int main() { Point p; while(cin >> p) { cout << p << endl; } return 0; }
输入
多组数据,每组两个整数
输出
对每组数据,输出一行,就是输入的两个整数样例输入
2 3
4 5
样例输出
2,3
4,5
来源Guo Wei
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 friend istream & operator >>(istream & i,Point & p){ 2 i>>p.x>>p.y; 3 return i; 4 } 5 friend ostream & operator <<(ostream & o,Point & p){ 6 o<<p.x<<","<<p.y; 7 return o; 8 }
Qt真的一点也不严格-。-换VS才能找出错在哪
C:第四周程序填空题3
描述
写一个二维数组类 Array2,使得下面程序的输出结果是:
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
程序:
#include <iostream> #include <cstring> using namespace std; class Array2 { // 在此处补充你的代码 }; int main() { Array2 a(3,4); int i,j; for( i = 0;i < 3; ++i ) for( j = 0; j < 4; j ++ ) a[i][j] = i * 4 + j; for( i = 0;i < 3; ++i ) { for( j = 0; j < 4; j ++ ) { cout << a(i,j) << ","; } cout << endl; } cout << "next" << endl; Array2 b; b = a; for( i = 0;i < 3; ++i ) { for( j = 0; j < 4; j ++ ) { cout << b[i][j] << ","; } cout << endl; } return 0; }
输入
无
输出
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
样例输入
None
样例输出
0,1,2,3,
4,5,6,7,
8,9,10,11,
next
0,1,2,3,
4,5,6,7,
8,9,10,11,
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 int l, r; 2 int **p; 3 public: 4 Array2(int a = 3, int b = 4) :l(a), r(b) { 5 p = new int*[a]; 6 for (int i = 0; i<a; i++) { 7 p[i] = new int[b]; 8 } 9 } 10 ~Array2() { 11 for (int i = 0; i<l; i++) { 12 delete[]p[i]; 13 } 14 delete[]p; 15 } 16 int* operator [](int a) { 17 return p[a]; 18 } 19 int& operator ()(int a, int b) { 20 return p[a][b]; 21 } 22 Array2&operator =(const Array2& s) { 23 l = s.l, r = s.r; 24 for (int i = 0; i<l; i++) 25 for (int j = 0; j<r; j++) 26 p[i][j] = s.p[i][j]; 27 return *this; 28 }
关于浅拷贝与深拷贝的区别:
简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,
而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,
采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
所以我们需要重载赋值运算符
值得注意的是二维数组的动态内存申请
D:别叫,这个大整数已经很简化了!
描述
程序填空,输出指定结果
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std; const int MAX = 110; class CHugeInt { // 在此处补充你的代码 }; int main() { char s[210]; int n; while (cin >> s >> n) { CHugeInt a(s); CHugeInt b(n); cout << a + b << endl; cout << n + a << endl; cout << a + n << endl; b += n; cout << ++ b << endl; cout << b++ << endl; cout << b << endl; } return 0; }
输入
多组数据,每组数据是两个非负整数s和 n。s最多可能200位, n用int能表示
输出
对每组数据,输出6行,内容分别是:样例输入
99999999999999999999999999888888888888888812345678901234567789 12
6 6
样例输出
99999999999999999999999999888888888888888812345678901234567801
99999999999999999999999999888888888888888812345678901234567801
99999999999999999999999999888888888888888812345678901234567801
25
25
26
12
12
12
13
13
14
来源Guo Wei
注定失败的战争,也要拼尽全力去打赢它;
就算输,也要输得足够漂亮。