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

相关推荐
飞鸿踏雪(蓝屏选手)13 小时前
137 ≤ Chrome 主密钥获取研究
c++·chrome·windows·网络安全·逆向分析
汉克老师19 小时前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
子兮曰20 小时前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫20 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
naturerun20 小时前
从数组中删除元素的算法
数据结构·c++·算法
特种加菲猫20 小时前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
Andy21 小时前
C++ list容器基本逻辑结构详解
c++·windows·list
想唱rap1 天前
传输层协议TCP
linux·运维·服务器·网络·c++·tcp/ip
瑶池酒剑仙1 天前
C++类和对象完全指南:从封装继承多态到内存布局的面向对象宝典(雨夜论道)
c语言·开发语言·c++·visual studio
潇湘散客1 天前
CAX软件插件化设计实现牛刀小试
c++·算法·图形学·opengl