国庆作业4

C++运算符重载的实现过程和代码

所有运算符重载,都拥有一个统一的名称:operator# (#表示运算符号)

参数:根据运算符本身特点决定,如果是单目运算符,最多拥有一个参数,如果是双目运算符,最多拥有两个参数,返回值由用户自己决定

调用原则:运算符的左侧是函数调用者,右侧是该函数的参数

每个运算符重载,都可以实现两个版本的重载函数,分别是成员函数版和全局函数版

成员函数版比全局函数版本少一个参数,因为类对象本身就是一个参数

全局函数版和成员函数版只能实现一个,否则会造成调用时的混乱情况

全局函数版,需要使用友元函数来完成

#include 


using namespace std;


//定义一个复数类 5 + 3i
class Complex
{
private:
    int real;         //实部
    int vir;          //虚部


public:
    Complex() {}
    Complex(int r, int v):real(r), vir(v) {}         //有参构造


    //定义展示函数
    void show()
    {
        if(vir>=0)
        {
            cout<real - R.real;
        c.vir = this->vir - R.vir;


        return c;
    }


    //成员函数版实现关系运算符的重载:实部>实部  && 虚部>虚部
    bool operator>(const Complex &R)const
    {
        return this->real>R.real&&this->vir>R.vir;
    }


    //重载中括号运算符
    int & operator[](int index)
    {
        if(index == 0)
        {
            return real;          //返回实部
        }else if(index == 1)
        {
            return vir;           //返回虚部
        }
    }




    //重载+=运算符:实部+=实部   虚部+=虚部
    Complex & operator+=(const Complex &R)
    {
        this->real += R.real;
        this->vir += R.vir;


        return *this;                //返回自身的引用
    }


    //重载负号运算符: 实部= -实部, 虚部 = -虚部
    Complex operator-()
    {
        Complex c;
        c.real = -this->real;
        c.vir = -this->vir;


        return c;
    }


    //重载前置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1
    Complex &operator++()
    {
        ++this->real;
        ++this->vir;


        return *this;
    }


    //重载后置自增运算符重载函数:实部 = 实部+1   虚部=虚部+1
    Complex operator++(int)
    {
        Complex c;


        c.real = this->real++;
        c.vir = this->vir++;


        return c;
    }




    //将全局函数版实现的输出运算符重载函数设置成友元
    friend ostream &operator<<(ostream &L, Complex &c);


    //重载小括号运算符,做一个仿函数
    void operator()(string s)
    {
        cout<=0)
    {
        L< c2)              //调用关系运算符重载函数
    {
        cout<<"yes"<

你可能感兴趣的:(c++,算法,开发语言)