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

【学习笔记】构造函数+重载相关

【学习笔记】构造函数+重载相关

一、构造函数

构造函数在创建对象的过程就会执行,带参数与不带参数,带参数的构造函数会默认将成员变量赋值传进去的参数。

class Layer {
private:int layer_id;       // 层IDstd::string layer_json;  // 层的JSON配置
public:Layer(){ }// 构造函数实现Layer(int layerId, const std::string& layerJson) {layer_id = layerId;      // 初始化层IDlayer_json = layerJson;  // 初始化JSON配置}
};
// 使用带参数的构造函数创建Layer对象
Layer layer(1, "{\"name\":\"background\",\"opacity\":0.8}");// 等价于先创建对象,再赋值(但更高效)
Layer layer2;
layer2.layer_id = 1;
layer2.layer_json = "{\"name\":\"background\",\"opacity\":0.8}";

二、拷贝构造函数

拷贝构造函数的主要作用是用一个已存在的Window对象来初始化新对象。

class Window
{public:Window(){ }virtual ~Window(){ }// const:确保原对象不被修改,允许接收常量对象。Window(const Window& obj){win_id = obj.win_id;                                sizeType = obj.sizeType;type = obj.type;zorder = obj.zorder; isBackground = obj.isBackground; isFreeze = obj.isFreeze; }
..........

*默认行为:要是没有自定义拷贝构造函数,编译器会生成默认的,不过默认的是浅拷贝,这在对象管理动态资源时可能会引发问题。比如指针,浅拷贝仅复制指针值,导致多个对象指向同一块内存,析构时会引发双重释放错误。

三、赋值运算符重载

赋值运算符重载 Window& operator=(const Window& obj) 允许你使用 = 符号将一个 Window 对象的值赋给另一个 Window 对象。

class Window
{public:Window(){ }virtual ~Window(){ }Window& operator=(const Window& obj){if (this == &obj) return *this;  // 处理自我赋值win_id = obj.win_id;                                sizeType = obj.sizeType;type = obj.type;zorder = obj.zorder; isBackground = obj.isBackground; isFreeze = obj.isFreeze; isLock = obj.isLock; return *this;}
..........

举例:

Window win1;
Window win2;
win2 = win1;

四、比较运算符重载

class Window
{public:Window(){ }virtual ~Window(){ }// 相等比较运算符的实现bool operator==(const Window& obj) const{if(win_id == obj.win_id &&sizeType == obj.sizeType &&type == obj.type &&zorder == obj.zorder &&source == obj.source &&layerout == obj.layerout &&invalidResource == obj.invalidResource &&layerType == obj.layerType)return true;elsereturn false;}// 不相等比较运算符的实现bool operator!=(const Window& obj) const{return !operator==(obj);}
..........

举例:

Window win1;
Window win2;
win2 = win1;
if(win1 == win2)
{........
}
http://www.xdnf.cn/news/12462.html

相关文章:

  • 生成 Git SSH 证书
  • Linux 常用命令语法总结
  • 【Go语言基础【9】】字符串格式化与输入处理
  • 神经网络-Day46
  • react 常见的闭包陷阱深入解析
  • 循环神经网络(RNN)
  • 麒麟系统使用-进行.NET开发
  • 1.3 编译程序:单个C文件和多个C文件
  • Python打卡DAY46
  • JSON解析崩溃原因及解决方案
  • linux系统dd 工具介绍
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • win10+TensorRT+OpenCV+Qt+YOLOV8模型部署教程
  • 2025年多层PCB技术发展与厂商实践指南
  • C++总复习
  • 嵌入式学习笔记 - FreeRTOS 信号量以及释放函数
  • cursor和windsurf使用体验对比
  • NLP学习路线图(二十八):BERT及其变体
  • AI for Science(AI4S)的现在与未来,科学智能如何赋能科学研究?
  • Python训练营打卡Day46(2025.6.6)
  • leetcode 2434. 使用机器人打印字典序最小的字符串 中等
  • SpringCloud学习笔记-2
  • 【idea】分享一个关于Maven依赖管理好用的插件
  • 【redis实战篇】第八天
  • pyinstaller打包遇到报错,和pathlib冲突
  • KAG与RAG在医疗人工智能系统中的多维对比分析
  • Python读取阿里法拍网的html+解决登录cookie
  • 第四讲:类和对象(下)
  • 视觉SLAM基础补盲
  • git提交代码和解决冲突修复bug