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

7.构造函数的白话解释

先写一个通用的类和构造函数:

#define TEMP_FILTER_WINDOW_SIZE 10 // 包含必要的头文件(Qt线程、C++标准库) #include <QThread> #include <QObject> #include <algorithm> // 用于std::fill_n // 定义温度采集线程类,继承自Qt的QThread class TempWorkerThread : public QThread { // Qt的信号槽机制需要这个宏 Q_OBJECT public: // 构造函数声明(和类名相同) explicit TempWorkerThread(QObject *parent = nullptr); private: // 类的成员变量(m_前缀是Qt/工业编程常用命名规范) int m_filterWindowSize; // 滤波窗口大小 bool m_isCollecting; // 是否正在采集温度 bool m_isPaused; // 是否暂停采集 int m_tempBufferIndices[8];// 温度缓冲区索引(8个通道) double m_baseTemp; // 基准温度值 };

上面这个类定义,:什么意思?

这个:的核心含义

在 C++ 的类定义中,类名 : 继承方式 父类名里的:继承语法的标志,作用是声明:当前类(子类 / 派生类)继承了另一个类(父类 / 基类)的属性和方法

对应到class TempWorkerThread : public QThread

  • TempWorkerThread:你自定义的子类(也叫派生类);
  • ::继承标志,读作 “继承自”;
  • public公有继承(继承方式),是最常用的一种;
  • QThread:Qt 提供的父类(也叫基类),是线程相关的核心类。

整行代码的意思是:TempWorkerThread这个类公有继承QThread类,它可以使用QThread里的公有 / 保护成员(比如start()wait()方法,run()虚函数等),同时还能扩展自己的功能。

类定义OK后,写构造函数:

// 构造函数的声明:属于TempWorkerThread类,参数是QObject类型的父对象指针 TempWorkerThread::TempWorkerThread(QObject *parent) // 初始化列表:调用父类构造函数 + 初始化所有成员变量 : QThread(parent), // 调用父类QThread的构造函数,传递父对象 m_filterWindowSize(TEMP_FILTER_WINDOW_SIZE), // 初始化滤波窗口大小 m_isCollecting(false), // 初始状态:未采集 m_isPaused(false), // 初始状态:未暂停 m_baseTemp(25.0) // 基准温度初始化为25℃ { // 构造函数体:初始化8个温度缓冲区索引为0 // std::fill_n:把m_tempBufferIndices数组的前8个元素全部设为0 std::fill_n(m_tempBufferIndices, 8, 0); }

::什么意思,:又是什么意思?

代码核心部分解释

1. ::含义
  • TempWorkerThread::TempWorkerThread::作用域解析符,明确这个构造函数属于TempWorkerThread类;
  • 构造函数后的::初始化列表,先于函数体执行,负责:
    • 调用父类QThread(parent):因为子类继承了 QThread,必须先初始化父类;
    • 给所有成员变量赋初始值(比如m_baseTemp(25.0)),比在函数体里赋值更高效。
2. :含义

代码里: QThread(parent), m_filterWindowSize(TEMP_FILTER_WINDOW_SIZE), m_isCollecting(false), m_isPaused(false), m_baseTemp(25.0) 这部分的:,是 C++ 里构造函数特有的初始化列表语法,作用是:

  • 在构造函数体(大括号{}里的内容)执行之前,先初始化类的成员变量、或者调用父类的构造函数
  • 比在构造函数体里赋值更高效,也是 C++ 的最佳实践。
  • QThread(parent):因为TempWorkerThread继承了 Qt 的QThread类(线程类),所以创建子类对象时,必须先初始化父类,这是 C++ 继承的规则;
  • m_开头的变量是类的成员变量(属于这个类的 “属性”),是编程里的命名规范,方便识别;
http://www.jsqmd.com/news/238868/

相关文章:

  • 360Controller:让你的Xbox手柄在Mac上完美运行
  • 服务端跨平台部署的7个黄金法则,第5个多数人从未听过
  • ‌测试复杂交互:拖拽可访问性——专业测试从业者的全面指南
  • 为什么UV Squares能成为Blender UV编辑的必备神器?
  • AI斗地主助手终极指南:从新手到高手的实战秘籍
  • OFD转PDF神器:轻松解锁国产文档格式兼容新境界
  • macOS Xbox手柄驱动终极指南:轻松实现完美游戏体验
  • 如何快速搭建智能机器狗:openDogV2完整实践指南
  • 蔚蓝档案自动化脚本使用指南:告别重复操作,游戏效率翻倍
  • MyKeymap完整教程:为每个程序创建专属键盘布局
  • MediaPipe Hands模型微调:适应特定场景的教程
  • Z-Image跨境协作方案:全球节点加速访问
  • Mac Mouse Fix:重新定义你的Mac鼠标操控边界
  • 无需GPU也能流畅运行!AI手势追踪部署优化教程
  • ComfyUI-Impact-Pack项目中SAM模型加载问题的解决方案
  • Stretchly终极攻略:5步打造完美工作休息节奏
  • AI手势识别支持中文文档?本土化部署最佳实践
  • Stretchly高效使用指南:5个技巧让休息提醒更智能
  • 抖音下载工具实用指南:轻松掌握高效下载技巧
  • CompressO视频压缩工具:一键解决大文件存储与传输难题
  • AI手势交互技术:MediaPipe Hands部署指南
  • Java高性能缓存库Caffeine全解析
  • SmartTaskbar终极指南:重新定义你的Windows桌面体验
  • 碧蓝航线全皮肤解锁终极配置指南
  • AI桌面助手:开启智能办公新纪元的5大效率革命
  • AI健身动作评估方案:不用买显卡,2块钱测试模型效果
  • Mac Mouse Fix性能优化指南:核心技术解析与效率提升实战
  • Xournal++跨平台手写笔记软件安装与优化全攻略
  • QQ群数据采集工具完整指南:3步获取精准社群画像
  • 腾讯二面:王者荣耀亿级排行榜,如何设计?