C++ 运算符重载

    这篇文章对运算符的重载进行简单的总结。

1. 概念:运算符重载的本质是函数重载。

2. 格式:

返回类型 operator 运算符名称(形参列表)
{
    重载实体;
}

可以把上面的 [ operator 运算符名称 ] 看作新的函数名。

3. 规则:

  • C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
  • C++允许重载的运算符,C++中绝大部分运算符都是可以被重载的;

                    C++ 运算符重载_第1张图片

              C++ 运算符重载_第2张图片

  • 重载不能改变运算符运算对象(即操作数)的个数;如,关系运算符“>”和“<”等是双目运算符,重载后仍为双目运算符,需要两个参数。运算符”+“,”-“,”*“,”&“等既可以作为单目运算符,也可以作为双目运算符,可以分别将它们重载为单目运算符或双目运算符。
  • 重载不能改变运算符的优先级别;
  • 重载不能改变运算符的结合性。如,复制运算符”=“是右结合性(自右至左),重载后仍为右结合性;
  • 重载运算符的函数不能有默认的参数;
  • 重载运算符的运算中至少有一个操作数是自定义类;
  • 不必重载的运算符(= &);
  • 对运算符的重载,不应该失去其原有的意义;

4. 友元重载和成员重载

    大多数运算符既可以友元重载也可以成员重载,

4.1 单目运算符重载

格式:

    全局函数:operator#(M);

    成员函数:M.operator#()

4.1.1 -(负数)运算符重载(+正数类似)

#include 
using namespace std;
class Complex{
public:
    Complex(float x=0, float y=0):_x(x),_y(y) {}
    void dis()
    {
        cout<<"("<<_x<<","<<_y<<")"<#include 
using namespace std;
class Complex{
public:
    Complex(float x=0, float y=0):_x(x),_y(y) {}
    void dis(){
        cout<<"("<<_x<<","<<_y<<")"<C++ 运算符重载_第3张图片

4.1.3 ++运算符重载(后++,后--类似)

#include 
using namespace std;
class Complex{
public:
    Complex(float x=0, float y=0):_x(x),_y(y) {}
    void dis(){
        cout<<"("<<_x<<","<<_y<<")"<

输出结果:

C++ 运算符重载_第4张图片

4.2 双目运算符重载

格式:

    全局函数:operator#(L, R);

    成员函数:L.operator#(R)

4.2.1 +=运算符重载(-= 也一样)

#include 
using namespace std;
class Complex{
public:
    Complex(float x=0, float y=0):_x(x),_y(y) {}
    void dis()
    {
        cout<<"("<<_x<<","<<_y<<")"<_x += c._x;
        this->_y += c._y;
        return *this;
    }
private:
    float _x;
    float _y;
};
int main(){
    int a = 10, b = 20,c = 30;
    (a += b) += c;            //作对比
    cout<<"a = "<C++ 运算符重载_第5张图片

如上述代码所示,与类对象的内置类型作了对比。返回引用的原因:返回的操作数还要作为左值进行操作。

4.2.2 +运算符重载(-运算符类似)

#include 
using namespace std;

class Complex{
public:
    Complex(float x=0, float y=0):_x(x),_y(y) {}
    void dis(){
        cout<<"("<<_x<<","<<_y<<")"<_x + another._x,this->_y + another._y);
}
int main()
{
    //作对比
    int a = 3;
    int b = 4;
    cout<<"a = "<C++ 运算符重载_第6张图片

友元函数的实现代码:链接~

上面只是简单的列举几个作为例子,String GitHub链接 是本人写的一个String的实现。



你可能感兴趣的:(研究生)