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

1     MyInt& operator -(int a){
2         nVal-=a;
3         return *this;
4     }
5     operator int () {
6     return nVal;
7     }
View Code

木有看到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

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         }        
View Code

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,
 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     }
View Code

关于浅拷贝与深拷贝的区别:

简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,
而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,
采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
所以我们需要重载赋值运算符
值得注意的是二维数组的动态内存申请

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

posted @ 2018-03-17 17:11  TobicYAL  阅读(2094)  评论(4编辑  收藏  举报