运算符重载的一些注意事项

1. 能不能是非成员函数

可以,但是前提是,既然写成了非成员函数,
就意味着你不能对私有的成员变量进行访问
#include<iostream>
using namespace std;

class Stock {
public:
    Stock(int b) : a(b) {}
    int a;
};

Stock operator+(Stock& a, Stock& b) {
    return Stock(a.a + b.a);
}

int main() {
    Stock s1(1), s2(2);
    Stock s3 = s1 + s2;
    cout << s3.a << endl;
    return 0;
}

2.友元函数

什么时候必须用友元函数呢,就是你重载的运算符左侧的操作符必须是其他类的对象,比如你要重载输入输出运算符,运算符的左侧必须是cin,cout,这时候如果还是写成成员函数,那么由于参数列表的第一个参数默认是调用对象,也就是this,这就看着很奇怪了
而且当你重载操作符的时候,通过友元函数可以颠倒操作数之间的顺序,不受左侧必须是自定义类型的限制

#include<iostream>
using namespace std;

class Stock {
private:
    int a;
public:
    Stock(int b) : a(b) {}
    friend ostream& operator<<(ostream& out, Stock& a);
    friend istream& operator>>(istream& in, Stock& a);
};

ostream& operator<<(ostream& out, Stock& a) {
    out << a.a;
    return out;
}

istream& operator>>(istream& in, Stock& a) {
    in >> a.a;
    return in;
}

int main() {
    Stock s1(0);
    cin >> s1;
    cout << s1;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴塞罗那的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值