DAY5 C++运算符重载

1.类实现> 、<、!=、||、!和后自增、前自减、后自减运算符的重载

代码:

cpp 复制代码
#include <iostream>

using namespace std;
class Complex
{
    int rel;
    int vir;
public:
    Complex(){};
    Complex(int rel,int vir):rel(rel),vir(vir){cout << "有参构造" << endl;}
    bool operator>(const Complex other);
    bool operator<(const Complex other);
    bool operator!=(const Complex other);
    bool operator||(const Complex other);
    bool operator!();
    Complex operator++();
    Complex operator--();
    friend Complex operator++(Complex &other,int);
    friend Complex operator--(Complex &other,int);
    void show();
};
bool Complex::operator>(const Complex other)
{
    return  rel>other.rel && vir >other.vir;
}
bool Complex::operator<(const Complex other)
{
    return  rel<other.rel && vir<other.vir;
}
bool Complex::operator!=(const Complex other)
{
    return  (rel!=other.rel) || (vir!=other.vir);
}
bool Complex::operator||(const Complex other)
{
    return  (rel||vir) || (other.rel||other.vir);
}
bool Complex::operator!()
{
    return  !(rel&&vir);
}
Complex Complex::operator++()
{
    Complex temp;
    temp.rel=++this->rel;
    temp.vir=++this->vir;
    return temp;
}
Complex Complex::operator--()
{
    Complex temp;
    temp.rel=--this->rel;
    temp.vir=--this->vir;
    return temp;
}
Complex operator++(Complex &other,int)
{
    Complex temp;
    temp.rel=other.rel++;
    temp.vir=other.vir++;
    return temp;
}
Complex operator--(Complex &other,int)
{
    Complex temp;
    temp.rel=other.rel--;
    temp.vir=other.vir--;
    return temp;
}
void Complex::show()
{
    cout << rel << "+" << vir << "i" << endl;
}
int main()
{
    Complex s(1,3);
    Complex p(5,6);
    Complex ss;
    bool rrr=(s<p);
    cout << rrr << endl;
    s=++p;
    ss=p++;
    s.show();
    ss.show();
    return 0;
}

2.My_string类中的+,==,>运算符重载

代码:

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char c = '\0';
class My_string
{
    char *str;     //记录C风格的字符串
    int size;      //记录字符串长度
public:
    //无参构造
    My_string():str(new char('\0')),size(0){cout << "无参构造" << endl;}
    //有参构造
    My_string(const char *s):str(new char[strlen(s)+1]),size(strlen(s)+1)//分配足够的空间来接收字符串,将接收到的字符串赋值给str
    {
        strcpy(this->str,s);
        cout << "有参构造" << endl;
    }
    //拷贝构造
    My_string(const My_string &other):str(new char[other.size+1])
    {
        strcpy(this->str,other.str);
        this->size=other.size;
        cout << "拷贝构造" << endl;
    }
    //拷贝赋值
    My_string &operator=(const My_string &other)
    {
        delete []str;
        str = new char[other.size+1];
        strcpy(this->str,other.str);
        this->size = other.size;
        cout << "拷贝赋值" << endl;
        return *this;
    }
    char *operator+(const My_string other);
    bool operator==(const My_string other);
    bool operator>(const My_string other);
    //析构函数
    ~My_string()
    {
        delete []str;
        cout << "析构函数" << endl;
    }
    //at函数
    char &my_at(int num);
};
char *My_string::operator+(const My_string other)
{
    char *buff=new char[strlen(str)+strlen(other.str)+1];
    strcpy(buff,str);
    strcat(buff,other.str);
    buff[strlen(buff)]='\0';
    return buff;
}
bool My_string::operator==(const My_string other)
{
    if(strcmp(this->str,other.str)==0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
bool My_string::operator>(const My_string other)
{
    if(strcmp(this->str,other.str)>0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
char &My_string::my_at(int num)
{
        if(num>=size||num<0)
        {
            cout<< "越界访问" << endl;
            return c;
        }
        else
        {
            return str[num];
        }
}
int main()
{
    My_string s="abcde";
    My_string s1="123";
    My_string s2="abcde";
    cout << s.my_at(0) << endl;
    cout << s.my_at(4) << endl;
    cout << s.my_at(5) << endl;
    cout << endl;
    cout << (s1>s) << endl;
    cout << endl;
    cout << (s==s2) << endl;
    cout << endl;
    cout << (s+s1) << endl;
    cout << endl;
    return 0;
}

Xmind知识点:

相关推荐
碧海蓝天202217 分钟前
C++法则21:避免将#include放在命名空间内部。
开发语言·c++
CodeWithMe35 分钟前
【读书笔记】《C++ Software Design》第一章《The Art of Software Design》
开发语言·c++
Tanecious.2 小时前
C++--红黑树
开发语言·c++
tanyongxi665 小时前
C++ Map 和 Set 详解:从原理到实战应用
开发语言·c++
飒飒真编程5 小时前
C++类模板继承部分知识及测试代码
开发语言·c++·算法
救赎小恶魔6 小时前
C++11的整理笔记
c++·笔记
岁忧6 小时前
(LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
java·c++·算法·leetcode·面试·go
小何好运暴富开心幸福7 小时前
分层架构的C++高并发内存池性能优化
c++·性能优化·架构
汉克老师7 小时前
GESP2025年6月认证C++三级( 第三部分编程题(1)奇偶校验)
c++·gesp三级·gesp3级
教练、我想打篮球7 小时前
68 指针的减法操作
c++·c·struct