运算符重载

2019-05-11  本文已影响0人  Vincy_ivy

在比赛前一天写万恶的C++,我的内心也真是够强大,看了党课材料,做了高数线代,看了matlab和Android的接口,已经接近崩溃的状态,codeblocks不知道怎么了,卡到要命,还是听话的用dev吧~emmm 写完c渣渣就睡叭,明早六点钟的闹钟┭┮﹏┭┮//逃
补充一句:当时包菜师兄的矩阵快速幂用到了重载,咳咳,不过没看懂~真是打扰了

Title

设计一个字符串类MyString,使其只有1个私有成员:char str(指向字符串的指针); 该类具有构造函数、析构函数、复制构造函数,且具有其他成员函数:(参照上次作业),并为该类重载运算符加法"+="(相当于拼接),“=”(赋值,注意要深拷贝赋值),"[]"(返回取下标为index的字符)

Code

#include <bits/stdc++.h>
using namespace std;

class MyString{
public:
    MyString(char *str):str(str){
        str=str;
    }
    MyString(MyString &s);
    string gets(){return str;}
    //+=重载 
    void operator+=(const MyString &s){
        strcat(str,s.str);
    }
    //=重载 
    void operator=(const MyString &s){
        str=new char[strlen(s.str)+1];
        strcpy(str,s.str);
    }
    //[]重载 
    char &operator[](int i){
        return str[i];
    }

    //顺便把输出也写了吧;
    friend ostream &operator<<(ostream &out,const MyString &s){
        out<<s.str<<endl;
        return out;
    }  
    //还有输入
    friend istream &operator>>(istream &in,const MyString &s){
        in>>s.str;
        return in;
    } 


    //析构 
    ~MyString(){cout<<"deleting"<<endl;}
    private:
        char *str;
    };

    MyString::MyString(MyString &s){
        cout<<"process"<<s.str<<endl;
    }

    int main()
    {
        char a[100],b[100];
        scanf("%s%s",a,b);  
        char *p=a;
        char *q=b;
        MyString m(p),n(q),l(a);
        m+=n;
        cout<<"1下标输出的结果:"<<m.gets()[1]<<endl;
        cout<<"+=结果为:"<<m.gets()<<endl;
        m=n;
        cout<<"=结果为:"<<m.gets()<<endl;
        //cout<<m.gets()+n.gets();
        return 0;
    } 
上一篇下一篇

猜你喜欢

热点阅读