C++ 运算符重载

一元运算符重载

一元运算符通常出现在它们所操作的对象的左边,但有时它们也可以作为后缀。

重载自增运算符

Test& operator ++ () {
    ++a;
    return *this;
}

Test operator ++ (int) {
    Test ret(a);
    a++;
    return ret;
}

在前置++中,我们返回的是引用。而在后置++中,我们创建临时变量,返回操作前的值。参数列表中包含的 int 没有实际作用。

重载[]运算符

class Arr {
    int a[256];
public:
    int& operator[] (int i) {
        return a[i%256];
    }
};

int main() {
    Arr a;
    a[256]=1;
    cout<<a[0];
}

二元运算符重载

最常见的应用场景就是加减乘除了。比如我们要实现向量的加法。通常我们在传参时,都会使用常量引用来提高效率并保证安全。

注意,类私有成员可以被类成员函数访问,不区分成员在哪个实例里。因此以下例子是合法的

class Point {
    int x,y;
public:
    Point(int x,int y): x(x),y(y) {};
    Point operator + (const Point& b) {
        return Point(x+b.x,y+b.y);
    }
    void print() {
        cout<<x<<","<<y<<endl;
    }
};

int main() {
    Point a(1,1),b(2,3);
    (a+b).print();
}

输入输出流运算符重载

输入输出的重载本是可以通过成员函数完成的,但这样无法将 cout 作为左操作数,为了符合习惯,我们使用友元函数来完成这个重载过程。

class Point {
    int x,y;
public:
    Point(int x,int y): x(x),y(y) {};
    friend ostream& operator<<(ostream &os,const Point &p) {
        os<<p.x<<","<<p.y;
        return os;
    }
};

int main() {
    Point a(1,1);
    cout<<a;
}

输入重载同理,不做赘述。

原文地址:https://www.cnblogs.com/mollnn/p/12599038.html