运算符重载

1,

赋值运算符重载返回的是个引用,重载+运算符返回的也是个引用,所以都没有调用拷贝函数

#include<iostream>
using namespace std;
class point{
    private:
        int x,y;
    public:
        point(int x=0,int y =0);
        ~point(){
            cout<<"我是析构"<<"("<<x<<","<<y<<")"<<endl;
        }
        point(point & p){
            x = p.x;
            y = p.y;
            cout<<"我是拷贝"<<"("<<x<<","<<y<<")"<<endl;
        }
        point & operator =(const point &p){
            if(this!=&p){
            x = p.x;
            y = p.y;
            cout<<"我是赋值"<<endl;
          }
            return *this;
        }
        friend point operator +(point &p1,point &p2);
        point &operator +(point &p1){
            x = x+p1.x;
            y =y+p1.y;
            return *this;
        }


};
// point operator +(point &p1,point &p2){
//     point temp(1,1);
//     temp.x = p1.x+p2.x;
//     temp.y = p1.y+p2.y;
//     return temp;

// }
point::point(int newx,int newy){
    x = newx;
    y = newy;
    cout<<"我是构造"<<"("<<x<<","<<y<<")"<<endl;
}
int main(){
    point p1(1,2);
    point p2(2,3);
    point p3(0,0);
    p3 = p1.operator+(p2);
    return 0;
}

 

2,

重载赋值运算符那没有&,返回一个point对象,所以要调用拷贝函数,

#include<iostream>
using namespace std;
class point{
    private:
        int x,y;
    public:
        point(int x=0,int y =0);
        ~point(){
            cout<<"我是析构"<<"("<<x<<","<<y<<")"<<endl;
        }
        point(point & p){
            x = p.x;
            y = p.y;
            cout<<"我是拷贝"<<"("<<x<<","<<y<<")"<<endl;
        }
        point  operator =(const point &p){
            if(this!=&p){
            x = p.x;
            y = p.y;
            cout<<"我是赋值"<<endl;
          }
            return *this;
        }
        friend point operator +(point &p1,point &p2);
        point &operator +(point &p1){
            x = x+p1.x;
            y =y+p1.y;
            return *this;
        }


};
// point operator +(point &p1,point &p2){
//     point temp(1,1);
//     temp.x = p1.x+p2.x;
//     temp.y = p1.y+p2.y;
//     return temp;

// }
point::point(int newx,int newy){
    x = newx;
    y = newy;
    cout<<"我是构造"<<"("<<x<<","<<y<<")"<<endl;
}
int main(){
    point p1(1,2);
    point p2(2,3);
    point p3(0,0);
    p3 = p1.operator+(p2);
    return 0;
}

 

3,

都不加&时

 

#include<iostream>
using namespace std;
class point{
    private:
        int x,y;
    public:
        point(int x=0,int y =0);
        ~point(){
            cout<<"我是析构"<<"("<<x<<","<<y<<")"<<endl;
        }
        point(point & p){
            x = p.x;
            y = p.y;
            cout<<"我是拷贝"<<"("<<x<<","<<y<<")"<<endl;
        }
        point  operator =(const point &p){
            if(this!=&p){
            x = p.x;
            y = p.y;
            cout<<"我是赋值"<<endl;
          }
            return *this;
        }
        friend point operator +(point &p1,point &p2);
        point operator +(point &p1){
            x = x+p1.x;
            y =y+p1.y;
            return *this;
        }


};
// point operator +(point &p1,point &p2){
//     point temp(1,1);
//     temp.x = p1.x+p2.x;
//     temp.y = p1.y+p2.y;
//     return temp;

// }
point::point(int newx,int newy){
    x = newx;
    y = newy;
    cout<<"我是构造"<<"("<<x<<","<<y<<")"<<endl;
}
int main(){
    point p1(1,2);
    point p2(2,3);
    point p3(0,0);
    p3 = p1.operator+(p2);
    return 0;
}

 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值