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

相关推荐
2401_891482174 小时前
多平台UI框架C++开发
开发语言·c++·算法
无敌昊哥战神4 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
Darkwanderor5 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920745 小时前
分布式系统安全通信
开发语言·c++·算法
2401_877274246 小时前
从匿名管道到 Master-Slave 进程池:Linux 进程间通信深度实践
linux·服务器·c++
汉克老师6 小时前
GESP5级C++考试语法知识(八、链表(三)循环链表)
c++·约瑟夫问题·循环链表·gesp5级·gesp五级
阿贵---6 小时前
C++中的RAII技术深入
开发语言·c++·算法
PiKaMouse.7 小时前
navigation2-humble从零带读笔记第一篇:nav2_core
c++·算法·机器人
lightqjx7 小时前
【算法】二分算法
c++·算法·leetcode·二分算法·二分模板
Irissgwe8 小时前
进程间通信
linux·服务器·网络·c++·进程间通信