当前位置: 首页 > article >正文

C++(运算符重载)

运算符重载

为什么要有运算符重载?

        如果没有重载运算符,类的对象不能进行运算符操作
        本质是函数重载,函数名是以运算符的形式类命名,调用函数也是通过运算符来调用。

        p + p1; 左值调用运算符,运算符右侧为传进去的参数

定义

        (1)给运算符赋予新的含义,在类的内部定义的运算符重载和成员函数是一样的 
        (2)重载方法:定义一个重载运算符的函数,在需要执行被重载的运算符时,系统会自动调用

函数类型 operator 运算符名称(参数列表);
bool operator ==(const Person &s);

        this是运算符的左值,参数是运算符的右值

        

重载赋值运算符

        C++会对每个类默认重载赋值运算符,默认的逻辑是成员变量逐个赋值

        

        

结论:
        (1)用一个已经存在的对象给一个新的对象初始化,调用拷贝构造函数
        (2)两个都是已经存在的对象,调用赋值运算符重载函数

系统默认的赋值运算符

         

总结

        (1)必须重载和默认赋值运算符相同类型的参数(对象的引用),才能覆盖掉默认的赋值运算符;
        (2)自己重载了,系统的重载是否还在?
                系统的还在,因为我们重载的赋值运算符的参数和C++默认生成的不一样,所以不会覆盖掉默认赋值运算符的重载
        (3)赋值运算符是算浅拷贝,没有特殊需求,是不用覆盖系统默认的 

C++中默认存在的函数

        

++运算符重载

         

重载输出运算符<<

         

#include <iostream>
using namespace std;
class Person
{
	//istream  输入流   ostream  输出流 
	friend ostream &operator << (ostream &os, const Person &ob);
public:
	Person(int age):age(age){}
private:
	int age;
};
//必须是全局的
ostream &operator << (ostream &os, const Person &ob)
{
	os << ob.age;//私有的变量,要加友元
	return os;
}
int main(){
	Person per1(14);
	Person per2(18);
	cout << per1 << " " << per2 << endl;
 	return 0;
}

 


http://www.kler.cn/a/372615.html

相关文章:

  • Unity性能优化4【内存实战篇】
  • HTML的常用标签
  • 接口测试加密了怎么测试
  • 设计产品宣传册没头绪?推荐一个超多产品宣传册、画册的案例网站
  • 8. 性能指标
  • C#运算符与表达式详解
  • iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
  • 【Searxng】Searxng docker 安装
  • 《IMM交互式多模型滤波MATLAB实践》专栏目录,持续更新……
  • 基于Django+python的车牌识别系统设计与实现(带文档)
  • CentOS 7 下升级 OpenSSL
  • w外链如何跳转微信小程序
  • 快速上手 Rust——环境配置与项目初始化
  • 【C++刷题】力扣-#594-最长和谐子序列
  • vue添加省市区
  • 【Gorm】自定义数据类型
  • MacOS的powermetrics命令查看macbook笔记本的耗能情况,附带查看ANE的工作情况
  • 基于单片机的恒流源技术研究
  • ADS8320E/2K5 数据手册ADS8320一款16位模数转换器 A/D转换器芯片
  • IDEA连接数据库报错(javax.net.ssl.SSLHandshakeException: No appropriate protocol )
  • 使用openssl验证https配置的ssl证书是否可以正常访问
  • CentOS 9 Stream 上安装 Git
  • 分类预测 | GCN图卷积神经网络多特征分类预测(MATLAB)
  • AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion论文阅读笔记
  • Efficient Cascaded Multiscale Adaptive Network for Image Restoration 论文阅读笔记
  • pip install -e .将正在开发的python包安装到虚拟环境中,以便测试和调试。 如果该包有依赖项,pip会自动安装依赖项