c++运算符重载

本文介绍了C++中的友元函数,它允许非成员函数访问类的私有和保护成员。在重载操作符时,如复合赋值运算符,通常需要成对出现。此外,自增自减运算符的重载需要注意前置和后置的区别。C++20引入了 spaceship operator( <=> ),通过默认实现简化了比较运算符的重载。示例展示了如何使用 spaceship operator 来实现点类的比较操作。
摘要由CSDN通过智能技术生成


Note:Only create an overload if your type has a single, obvious
meaning to an operator

友元函数

一种全局函数,可以在类里声明,其他地方定义。或者在类里定义生命。
但是这个友元函数,不是类的成员。用的时候直接用,但是可以接触类的所有权限的变量。
对于,重载操作符来说,可以把一些重载体函数定义为友元函数。
具体来说,如果进行运算的这两个类,是对等的,没有修改任一个的值,那么,建议用友元。
如果,类似=,是赋值,对左边的变量做修改了。那么这时候应该重载为成员函数。
在这里插入图片描述

重载:复合赋值

在这里插入图片描述

Operator pairings

许多操作符是成对的,重载其中一个的时候,另一个相对应的也应该重载。
在这里插入图片描述

自增自减运算符的重载

对于a++和++a,这两个运算符哪个在前,哪个后。函数是不一样的

c++20,spaceship operator

就是只需要重载一个,其他的就都能重载了。

#include <compare>
// return type deduced as std::strong_ordering
friend auto operator<=>(point p1, point p2) = default;
int x_;
int y_;
1
#include <iostream> 2
3
class point { 4
public: 5
point(int x, int y) 6
: x_{x} 7
, y_{y} {} 8
9
// hidden friend - preferred 10
11
12
13
private: 14
15
16
}; 17
18
auto main() -> int { 19
auto const p2 = point{1, 2}; 20
auto const p1 = point{1, 2}; 21
std::cout << "p1 == p2 " << (p1 == p2) << '\n'; 22
std::cout << "p1 != p2 " << (p1 != p2) << '\n'; 23
std::cout << "p1 < p2 " << (p1 < p2) << '\n'; 24
std::cout << "p1 > p2 " << (p1 > p2) << '\n'; 25
std::cout << "p1 <= p2 " << (p1 <= p2) << '\n'; 26
std::cout << "p1 >= p2 " << (p1 >= p2) << '\n'; 27
} 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值