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知识点:

相关推荐
温宇飞26 分钟前
C++ 内存与性能优化:语言特性的开销分析与替代方案
c++
Lucis__1 小时前
从基本用法到迭代器实现—list重难点突破
c++·容器·list
努力学习的小全全2 小时前
【CCF-CSP】06-01数位之和
c++·ccf-csp
再卷也是菜2 小时前
C++篇(16)C++11(下)
c++
CS_浮鱼2 小时前
【C++进阶】智能指针
开发语言·c++
怕什么真理无穷2 小时前
C++_面试题_21_字符串操作
java·开发语言·c++
Dream it possible!3 小时前
LeetCode 面试经典 150_二叉树_二叉树展开为链表(74_114_C++_中等)
c++·leetcode·链表·面试·二叉树
cookies_s_s4 小时前
C++20 协程
linux·开发语言·c++
hetao17338374 小时前
2025-11-13~14 hetao1733837的刷题记录
c++·算法
hansang_IR4 小时前
【题解】洛谷 P2476 [SCOI2008] 着色方案 [记搜]
c++·算法·记忆化搜索