zoukankan      html  css  js  c++  java
  • 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

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    Symmetric Tree
    Splunk的安装与使用
    【BZOJ2662】【BeiJing wc2012】冻结 分层图 裸的!
    Android NFC近场通信03----读写MifareClassic卡
    IOS把图片做成圆形效果
    【翻译自mos文章】CRS显示 正在执行的db instance 是offline状态
    远程訪问路由器下的mac os(ssh+vnc)
    POJ 2488 A Knight&#39;s Journey
    python 分词计算文档TF-IDF值并排序
    ExcelReader(解析Excel的工具类)
  • 原文地址:https://www.cnblogs.com/yalphait/p/8591014.html
Copyright © 2011-2022 走看看