mooc程式設計與演算法(三)C++物件導向程式設計 運算子多載 作業__c++和java基礎

來源:互聯網
上載者:User

1、MyString
要求輸入:

abc def123 456

要求輸出

abc,abc,abcdef,def,def123,123,123456,456,456
#include <iostream>#include <string>#include <cstring>using namespace std;class MyString {    char * p;public:    MyString(const char * s) {        if( s) {            p = new char[strlen(s) + 1];            strcpy(p,s);        }        else            p = NULL;    }    ~MyString() { if(p) delete [] p; }    MyString(const MyString& mystr){        if(mystr.p){            p = new char[strlen(mystr.p)+1];            strcpy(p, mystr.p);        }        else p = NULL;    }    void Copy(char *s){        if(s){            p = new char[strlen(s)+1];            strcpy(p, s);        }        else p=NULL;    }    friend ostream&operator<<(ostream & os, const MyString & mystring){        os<<mystring.p;        return os;    }    MyString & operator = (char *s){        if(s){            p = new char[strlen(s)+1];            strcpy(p, s);        }        else p=NULL;        return *this;    }    MyString & operator = (const MyString& s){        if(s.p){            p = new char[strlen(s.p)+1];            strcpy(p, s.p);        }        else p=NULL;        return *this;    }};int main(){    char w1[200],w2[100];    while( cin >> w1 >> w2) {        MyString s1(w1),s2 = s1;        MyString s3(NULL);        s3.Copy(w1);        cout << s1 << "," << s2 << "," << s3 << endl;        s2 = w2;        s3 = s2;        s1 = s3;        cout << s1 << "," << s2 << "," << s3 << endl;    }}

2、看上去好坑的運算子多載
要求輸入:

2030

要求輸出

15,1225,22
#include <iostream> using namespace std;class MyInt {     int nVal;     public:     MyInt( int n) { nVal = n ;}friend MyInt& operator- (MyInt &m, int k){        m.nVal -= k;        return m;    }    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;}

3、驚呆。Point竟然能這樣輸入輸出
輸入要求:

2 34 5

要求輸出

2,34,5
#include <iostream> using namespace std;class Point {     private:         int x;         int y;     public:         Point() { };friend istream& operator>>(istream &i, Point& p){        i>>p.x;        i>>p.y;        return i;    }    friend ostream& operator<<(ostream &o, const Point& p){        o<<p.x<<",";        o<<p.y;        return o;    }}; int main() {     Point p;    while(cin >> p) {        cout << p << endl;     }    return 0;}

4、第四周程式填空題3
要求輸入:

None

要求輸出

0,1,2,3,4,5,6,7,8,9,10,11,next0,1,2,3,4,5,6,7,8,9,10,11,
#include <iostream>#include <cstring>using namespace std;class Array2 {private:     int row;     int col;    int **p;public:    Array2():row(0), col(0){p=NULL;}    Array2(int row_, int col_):row(row_), col(col_){        p = new int*[row];        for (int i = 0; i < col; ++i) {            p[i] = new int [1];        }    }    int* operator[](int i){        //重載[]        return p[i];    }    int operator()(int x, int y){        //重載()        return p[x][y];    }    Array2& operator=(const Array2& a){        //重載等號        if (p!=NULL){            for (int i = 0; i < row; ++i) {                delete[]p[row];            }            delete []p;        }        p = new int *[a.row];        for (int i = 0; i < a.row; ++i) {            p[i] = new int [a.col];        }        for (int i = 0; i < a.row; ++i) {            for (int j = 0; j < a.col; ++j) {                p[i][j] = a.p[i][j];            }        }        return *this;    }};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;}

5、別叫,這個大數已經很化簡了。。。。

#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std;const int MAX = 110; class CHugeInt {private:    char *p;public:    CHugeInt(){p=NULL;}    CHugeInt(int x);    CHugeInt(char *x);    void reverse(char *x);    char* int_to_char(int n);//這裡要在下面的成員函數中使用,因此必須設定為成員函數    void print(){cout<<p<<endl;}    char* add_2_chars(char *p1, char *p2);    CHugeInt(CHugeInt &c);    friend char* operator+(const CHugeInt &c1, const CHugeInt &c2);    friend char* operator+(const int &n, const CHugeInt &c);    friend char* operator+(const CHugeInt &c, const int &n);    CHugeInt & operator++();//前置    CHugeInt operator++(int );    operator char*(){return p;};    CHugeInt& operator += (const int n);};CHugeInt::CHugeInt(char *x) {    p = new char[210];    strcpy(p, x);}CHugeInt::CHugeInt(int x) {    p = new char[210];    char *pp = int_to_char(x);    strcpy(p, pp);}CHugeInt& CHugeInt::operator+=(const int n) {    char *n_c = new char[210];    n_c = int_to_char(n);//這個是我要加的n_c    //重載+=    char *pp = new char[210];    strcpy(pp, add_2_chars(p, n_c));    strcpy(p, pp);    return *this;}char* CHugeInt::int_to_char(int n) {    char *pp = new char[210];    int i=0;    do{        pp[i++] = n%10+'0';    }while((n=n/10));    reverse(pp);    return pp;}void CHugeInt::reverse(char *x) {    int l=0, r=strlen(x)-1;    while(l<r){        char c;        c = x[l];        x[l] = x[r];        x[r] = c;        l++;r--;    }}char* CHugeInt::add_2_chars(char *p1, char *p2) {    if(strlen(p1)>strlen(p2)){        //保證p是比較短的        char *tt = new char[210];        strcpy(tt, p1);        strcpy(p1, p2);        strcpy(p2, tt);        delete []tt;    }    const int mins_len = strlen(p1);    const int maxs_len = strlen(p2);    int temp = 0;    char *pp = new char[210];    int x1=0, x2=0, sum_x1_x2;//儲存兩個數的個位元字    reverse(p2);    reverse(p1);    for (int i = 0; i < maxs_len; ++i) {        if(i<mins_len) x1 = p1[i]-'0';        else x1 = 0;        x2 = p2[i]-'0';        sum_x1_x2=x1+x2+temp;        char t = sum_x1_x2%10+'0';        pp[i] = t;        if(sum_x1_x2/10!=0) temp = sum_x1_x2/10;        else temp=0;    }    if(temp!=0) pp[maxs_len]='1';    reverse(pp);    return pp;}CHugeInt& CHugeInt::operator++() {    char *t = new char[2];    t[0]='1';    strcpy(p, add_2_chars(p, t));    return *this;}CHugeInt CHugeInt::operator++(int k) {    CHugeInt c(*this);    char *t = new char[2];    t[0]='1';    strcpy(p, add_2_chars(p, t));    return c;}CHugeInt::CHugeInt(CHugeInt &c) {    p = new char[210];    strcpy(p, c.p);}void reverse(char *x){    int l=0, r=strlen(x)-1;    while(l<r){        char c;        c = x[l];        x[l] = x[r];        x[r] = c;        l++;r--;    }}char* operator+(const CHugeInt &c1, const CHugeInt &c2) {    char *p1 = new char[210];    char *p2 = new char[210];    char *pp = new char[210];    strcpy(p1, c1.p);    strcpy(p2, c2.p);    if(strlen(p1)>strlen(p2)){        char *n = new char[210];        strcpy(n, p1);        strcpy(p1, p2);        strcpy(p2, n);        delete[] n;    }    const int lens_min = strlen(p1);    const int lens_max = strlen(p2);    reverse(p1);    reverse(p2);    int tmp = 0;    int x1 = 0;    int x2 = 0;    for (int i = 0; i < lens_max; ++i) {        if(i<lens_min) x1=p1[i]-'0';        else x1 = 0;        x2 = p2[i]-'0';        int sum_p1_p2 = x1+x2+tmp;        char t = sum_p1_p2%10+'0';        pp[i] = t;        if(sum_p1_p2/10!=0) tmp=sum_p1_p2/10;        else tmp = 0;    }    if(tmp!=0)pp[lens_max]='1';    reverse(pp);    return pp;}char* operator+(const int &n, const CHugeInt &c){    CHugeInt c_n(n);    return c_n+c;}char* operator+(const CHugeInt &c, const int &n){    CHugeInt n_c(n);    return c+n_c;};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;}

要求輸入:

99999999999999999999999999888888888888888812345678901234567789 12

要求輸出:

999999999999999999999999998888888888888888123456789012345678019999999999999999999999999988888888888888881234567890123456780199999999999999999999999999888888888888888812345678901234567801252526

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.