一篇文章带你了解c++运算符重载

 更新时间:2021年08月15日 09:46:13   作者:三丰杂货铺  
下面小编就为大家带来一篇深入理解C++运算符重载。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

友元函数

一种全局函数,可以在类里声明,其他地方定义。或者在类里定义生命。

但是这个友元函数,不是类的成员。用的时候直接用,但是可以接触类的所有权限的变量。

对于,重载操作符来说,可以把一些重载体函数定义为友元函数。

具体来说,如果进行运算的这两个类,是对等的,没有修改任一个的值,那么,建议用友元。

如果,类似=,是赋值,对左边的变量做修改了。那么这时候应该重载为成员函数。

在这里插入图片描述

重载:复合赋值

在这里插入图片描述

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
} 

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • VC程序在Win32环境下动态链接库(DLL)编程原理

    VC程序在Win32环境下动态链接库(DLL)编程原理

    这篇文章主要介绍了VC程序在Win32环境下动态链接库(DLL)编程原理,包括了dll文件的原理与具体实现过程,对于深入掌握VC程序设计具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C++动态规划算法实现矩阵链乘法

    C++动态规划算法实现矩阵链乘法

    动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解
    2022-06-06
  • 标准CSV格式的介绍和分析以及解析算法实例详解

    标准CSV格式的介绍和分析以及解析算法实例详解

    这篇文章主要介绍了标准CSV格式的介绍和分析以及解析算法实例详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • C++可调用对象callable object深入分析

    C++可调用对象callable object深入分析

    所谓的callable object,表示可以被某种方式调用其某些函数的对象。它可以是:一个函数、一个指向成员函数的指针、一个函数对象,该对象拥有operator()、一个lambda表达式,严格的说它是一种函数对象
    2022-08-08
  • 详细聊聊c语言中的缓冲区问题

    详细聊聊c语言中的缓冲区问题

    缓冲区又称为缓存,它是内存空间的一部分,也就是说在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,这篇文章主要给大家介绍了关于c语言中缓冲区问题的相关资料,需要的朋友可以参考下
    2021-11-11
  • 基于MFC实现多线程进度条

    基于MFC实现多线程进度条

    这篇文章主要为大家详细介绍了如何基于MFC实现多线程进度条效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • 详解c++中signal信号携带数据的接收与发送

    详解c++中signal信号携带数据的接收与发送

    这篇文章主要为大家详细介绍了c++中signal信号携带数据的接收与发送的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C语言实现随机发扑克牌

    C语言实现随机发扑克牌

    这篇文章主要为大家详细介绍了C语言实现随机发扑克牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Qt实现实时鼠标绘制图形

    Qt实现实时鼠标绘制图形

    这篇文章主要介绍了Qt中QGraphicsView架构下如何实现实时鼠标绘制图形,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • C++实现数独快速求解

    C++实现数独快速求解

    这篇文章主要为大家详细介绍了C++实现数独快速求解的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论