c++ 重载运算符

重载+或-运算符

重载方式有两种,一种是全局函数的方式,另外一种是成员函数的方式。

全局函数

class MyClass
{

    
public:
    int x;
    int y;

    MyClass(int x,int y);

    ~MyClass();void print()
    {
        cout << "x = " << x<< "	y = " << y << endl;
    }
};
MyClass operator+(MyClass &c1, MyClass &c2)
{
    MyClass res(c1.x + c2.x, c1.y + c2.y);
    return res;
}

MyClass::MyClass(int x,int y)
{
    this->x =x;
    this->y = y;

}

MyClass::~MyClass()
{


}
int _tmain(int argc, _TCHAR* argv[])
{
    
    MyClass c1(2,3);
    MyClass c2(4,5);
    MyClass c3 = c1+c2;
    
    c3.print();
     return 0;

}

成员函数的方式

class MyClass
{

    
public:
    int x;
    int y;

    MyClass(int x,int y);

    ~MyClass();

     MyClass& operator+( MyClass &c1); //成员函数的声明
    void print()
    {
        cout << "x = " << x<< "	y = " << y << endl;
    }
};


MyClass& MyClass::operator+( MyClass &c1) //实现需要加 域::   此处隐藏指向对象的this指针
{
    MyClass res(c1.x + this->x, c1.y + this->y);
    return res;
}


MyClass::MyClass(int x,int y)
{
    this->x =x;
    this->y = y;

}

MyClass::~MyClass()
{


}int _tmain(int argc, _TCHAR* argv[])
{
    
    MyClass c1(2,3);
    MyClass c2(4,5);
    MyClass c3 = c1+c2;
    
    c3.print();
     return 0;
}

重载++或者- -

分为前置++和后置++

同样两种方法,全局或者成员函数的方式

全局方式   注释为成员函数方式,隐藏this指针

class MyClass
{

    
public:
    int x;
    int y;

    MyClass(int x,int y);

    ~MyClass();

//MyClass& operator++(); 成员函数方式
void print() { cout << "x = " << x<< " y = " << y << endl; } };
MyClass::MyClass(
int x,int y) { this->x =x; this->y = y; } MyClass::~MyClass() { } MyClass& operator ++(MyClass &c1)//前置++ { c1.x++; c1.y++; return c1; }

/*

MyClass& MyClass::operator ++()//前置++  成员函数的方式
{
this->x++;
this->y++;
return *this;
}

*/
int _tmain(int argc, _TCHAR* argv[]) { MyClass c1(2,3); ++c1; c1.print(); return 0; }

后置++需要在函数中加int 防止与前置++重复

class MyClass
{

    
public:
    int x;
    int y;

    MyClass(int x,int y);

    ~MyClass();

    MyClass& operator++(int);

    void print()
    {
        cout << "x = " << x<< "	y = " << y << endl;
    }
};



MyClass::MyClass(int x,int y)
{
    this->x =x;
    this->y = y;
}

MyClass::~MyClass()
{
}


MyClass& MyClass::operator ++(int)//后置++
{
    this->x++;
    this->y++;
    return *this;
}

/*
MyClass& operator ++( MyClass c1,int)//后置++ 全局函数方式
{
    c1.x++;
    c1.y++;
    return c1;
}
*/

int _tmain(int argc, _TCHAR* argv[])
{
    
    MyClass c1(2,3);
    c1++;
    c1.print();
    return 0;

}

 - -的重载和++同理

参考博客:https://www.cnblogs.com/qq209049127/p/10542475.html

原文地址:https://www.cnblogs.com/9527s/p/13129443.html