首页 > 其他 > 详细

运算符重载及其重载模板写法

时间:2020-03-19 20:05:40      阅读:58      评论:0      收藏:0      [点我收藏+]

运算符重载写为成员函数还是全局函数的格式,取决于你所要达到的目的。

  重载为成员函数,那么该运算符的左边必须是某个类的对象实例。

  重载为全局函数,可以自定义该运算符的左边是什么东西,右边是什么东西。左边接受范围是第一个参数类型,右边接受范围是第二个参数类型。

 

#include <iostream>
//#include <string>
//#include "Fish.h"
using namespace std;

class Point {
    int x;
    int y;
public:
    Point(int x1 = 0, int y1 = 0) :x(x1), y(y1) {}

    Point(const Point& p) :x(p.x), y(p.y) {}
    
    // 输入输出运算符重载
    friend ostream& operator<<(ostream& output, const Point& p);
    friend istream& operator>>(istream& input, Point& p);
    

    // 第一个const保证了返回值不可被再次修改
    // 第三个const保证了const变量也能调用该操作符,也可保证成员变量不被修改

    const Point operator+ (const Point &p) const {
        return Point(x + p.x, y + p.y);
    }

    const Point operator- (const Point& p) const {
        return Point(x - p.x, y - p.y);
    }
    
    Point& operator+= (const Point& p) {
        x += p.x;
        y += p.y;
        return *this;
    }


    // 逻辑运算符
    bool operator== (const Point& p) const {
        return (x == p.x) && (y == p.y);
    }

    bool operator!= (const Point& p) {
        return (x != p.x) || (y != p.y);
    }

    // 负号,取反运算符
    const Point operator-() const {
        return Point(-x, -y);
    }

    //前置++
    Point& operator++() {
        x++;
        y++;
        return *this;
    }

    //后置++(括号内的int不可省略,不可更改)
    const Point operator++(int) {
        Point old = *this;
        x++;
        y++;
        return old;
    }
    
    void info() {
        cout << "(" << x << "," << y << ")" << endl;
    }
};

ostream& operator<<(ostream& output, const Point& p) {
    output << "(" << p.x << "," << p.y << ")";
    return output;
}

istream& operator>>(istream& input, Point& p) {
    input >> p.x >> p.y;
    return input;
}

int main() {

    Point p1(10, 20);
    Point p2(20, 30);
    Point p3;
    cout << p1 << endl;
    cin >> p3;
    cout << p3 << endl;

    return 0;
}

 

 

  

运算符重载及其重载模板写法

原文:https://www.cnblogs.com/primabrucexu/p/12526747.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!