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

C++核心编程_赋值运算符重载

4.5.4 赋值运算符重载

c++编译器至少给一个类添加4个函数

  1. 默认构造函数(无参,函数体为空)

  2. 默认析构函数(无参,函数体为空)

  3. 默认拷贝构造函数,对属性进行值拷贝

  4. 赋值运算符 operator=, 对属性进行值拷贝

如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题

/*c++编译器至少给一个类添加4个函数
1. 默认构造函数(无参,函数体为空)
2. 默认析构函数(无参,函数体为空)
3. 默认拷贝构造函数,对属性进行值拷贝
4. 赋值运算符 operator=, 对属性进行值拷贝
如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题
**作用:**重载关系运算符,可以让两个自定义类型对象进行对比操作
*/class Person
{
public:Person(int age) {//将年龄数据开辟到堆区m_Age = new int(age);};//重载赋值运算符Person& operator=(Person& p) {//先判断是否有属性在堆区,如果有先释放干净,然后再进行深拷贝if (m_Age != NULL){delete m_Age;m_Age = NULL;}//提供深拷贝 解决浅拷贝的问题m_Age = new int(*p.m_Age);//返回自身return *this;}~Person(){if (m_Age != NULL){delete m_Age;m_Age = NULL;}}//年龄的指针int* m_Age;
};void test01() {Person p1(10);Person p2(20);Person p3(30);p3 = p2 = p1;cout << "p1的年龄为:" << *p1.m_Age << endl;cout << "p2的年龄为:" << *p2.m_Age << endl;cout << "p3的年龄为:" << *p3.m_Age << endl;
}int main() {test01();system("pause");return 0;
}

相关文章:

  • 多线程(3)
  • 带sdf 的post sim 小结
  • azure web app创建分步指南系列之一
  • CMP401GSZ-REEL混合电压接口中的23ns延迟与±6V输入范围设计实现
  • const ‘不可变’到底是值不变还是地址不变
  • 痉挛性斜颈相关内容说明
  • 无人机桥梁3D建模、巡检、检测的航线规划
  • Spine工具入门教程2之导入
  • Linux安装及管理程序
  • 简易WLAN上传下载查看器by批处理
  • 95套HTML高端大数据可视化大屏源码分享
  • AI与软件工程结合的未来三年发展路径分析
  • AI对软件工程的影响及未来发展路径分析报告
  • ARXML解析与可视化工具
  • ToolsSet之:渐变色生成工具
  • 复刻真实世界的虚拟系统Goal
  • 漏洞Reconfigure the affected application to avoid use of weak cipher suites. 修复方案
  • Ts中的 可选链操作符
  • 【笔记】Suna 部署之 Supabase 数据库 schema 暴露操作
  • 【Doris基础】Doris中的Tablet详解:核心存储单元的设计与实现
  • 郑州专门做网站/百度服务中心电话
  • 个人资料库网站怎么做/宁波做网站的公司
  • 网站外链要怎么做/网站推广服务
  • 网站架构 seo/seo关键词排名工具
  • 殡葬类网站建设/电商平台如何推广运营
  • h5网站系统/百度提问在线回答问题