20230421作业(运算符重载)

#include <iostream>
#include <cstring>

using namespace std;

//定义类
class myString
{
private:
    char *str;      //记录c风格的字符串
    int size;       //记录字符串的实际长度
public:
    //无参构造
    mystring():size(10)
    {
        str = new char[size];   //构造一个长度为10的字符串
        strcpy(str,"");
    }
    //有参构造
    mystring(const char *s)
    {
        size = strlen(s);
        str = new char[size+1];
        strcpy(str,s);
    }
    //拷贝构造
    //mystring(mystring &other):str(new char(*(other.str))),size(other.size)
    mystring(mystring &other):size(other.size)
    {
        str = new char[size];
        strcpy(str,other.str);
    }
    //析构函数
    ~mystring()
    {
        delete []str;
        str = nullptr;
    }
    //判空函数
    int empty()
    {
        if(0==size)
            return 0;
        else
            return size;
    }
    //size函数
   int Size()
    {
        size = strlen(str);
        return size;
    }
    //c_str函数
   char *c_str()
   {
        return str;
   }
    //at函数
    char at(int pos)
    {
        if(pos<0||pos>size)
            cout<<"段错误"<<endl;
        return *(str+pos);

    //运算符重载 =
    myString& operator=(const myString &other)
    {

        strcpy(this->str, other.str);
        return *this; 
    }


    char operator[](int pos)
    {
        if(pos<0 || pos>size)
        {
            cout << "段错误" << endl;
        }
        return str[pos];
    }


    myString operator+(const myString &other)
    {

        strcat(this->str, other.str);
        return *this;
    }


    bool operator>(const myString &other)
    {
        if(this->str > other.str)
            return true;
        else
            return false;
    }


    bool operator<(const myString &other)
    {
        if(this->str < other.str)
            return true;
        else
            return false;
    }

    //设置友元
    friend ostream &operator<<(ostream &L, const myString &O);
    friend istream &operator>>(istream &L, const myString &O);
};

ostream &operator<<(ostream &L, const myString &O)
{
    L << O.str;
    return L;
}

istream &operator>>(istream &L, const myString &O)
{
    L >> O.str;
    return L;
}

int main()
{

    myString s1("abcdef");
    cout<<"s1="<<s1.c_str()<<endl;


    myString s2(s1);
    cout<<"s2="<<s2.c_str()<<endl;

    cout<<"s2.length()="<<s2.length()<<endl;
    cout<<"s2.c_str()="<<s2.c_str()<<endl;
    cout<<"s2.at(3)="<<s2.at(3)<<endl;


    myString s3;
    s3 = s1;
    cout<<"s3="<<s3.c_str()<<endl;


    cout << "s3[1]= " << s3[1] << endl;


     myString s4;
     s4 = s2+s3;
     cout << s4.c_str() << endl;


     if(s1>s4)
         cout<<"大于"<<endl;
     else if(s1<s4)
         cout<<"小于"<<endl;
     else
         cout<<"s1=s4"<<endl;

      cout << s3 << endl;;

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,我们可以通过运算符重载来定义自定义的加法和减法运算符。运算符重载是指在类中定义一个函数,使得该函数可以在使用特定运算符时被调用。 以下是加法运算符重载的示例: ```cpp class Complex{ private: double real; double imag; public: Complex(double r = 0, double i = 0){ real = r; imag = i; } Complex operator+(const Complex& c){ Complex res(real + c.real, imag + c.imag); return res; } }; ``` 在上面的示例中,我们定义了一个名为Complex的类,该类具有两个属性:real和imag,表示复数的实部和虚部。我们还定义了一个构造函数和一个加法运算符重载函数。加法运算符重载函数使用operator+作为函数名,并使用const Complex&作为参数。在函数体中,我们创建了一个新的Complex对象,将其实部和虚部初始化为当前对象和传入对象的实部和虚部的和,然后将该对象返回。 下面是减法运算符重载的示例: ```cpp class Complex{ private: double real; double imag; public: Complex(double r = 0, double i = 0){ real = r; imag = i; } Complex operator-(const Complex& c){ Complex res(real - c.real, imag - c.imag); return res; } }; ``` 在上面的示例中,我们定义了一个名为Complex的类,该类具有两个属性:real和imag,表示复数的实部和虚部。我们还定义了一个构造函数和一个减法运算符重载函数。减法运算符重载函数使用operator-作为函数名,并使用const Complex&作为参数。在函数体中,我们创建了一个新的Complex对象,将其实部和虚部初始化为当前对象和传入对象的实部和虚部的差,然后将该对象返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值