C++构造函数的一些其他应用(逐词逐句保姆讲解)
核心结论回顾初始化成员变量是最常用功能。构造函数本质是对象诞生瞬间自动执行的函数除了赋值还可以做资源申请、打印日志、计数、打开文件等各类操作。#include iostream #include string #include fstream // 文件操作头文件 using namespace std; class MobilePhone { public: // 构造函数创建对象自动执行 MobilePhone(string brand, int storage, string fileName) { // 任务1初始化当前对象的成员变量基础操作 m_brand brand; m_storage storage; // 任务2打开文件申请资源不是变量赋值 logFile.open(fileName, ios::app); if(logFile.is_open()) { cout 【构造函数】日志文件打开成功 endl; logFile 新手机 m_brand 存储: m_storage GB endl; } else { cout 【构造函数】日志文件打开失败 endl; } // 任务3全局计数统计 phoneCount; cout 【构造函数】已生产手机总数 phoneCount endl; } // 成员函数打印手机信息 void showInfo() { cout 手机品牌 m_brand 存储 m_storage GB endl; } // 静态函数查看总产量 static void showTotal() { cout 全部手机总产量 phoneCount endl; } // 析构函数提前了解对象销毁时执行关闭文件 ~MobilePhone() { if(logFile.is_open()) { logFile.close(); cout 【析构函数】文件已关闭 endl; } } private: string m_brand; int m_storage; ofstream logFile; // 文件输出流对象用来写日志 static int phoneCount; }; // 静态成员变量在类外部初始化 int MobilePhone::phoneCount 0; int main() { MobilePhone phone1(华为, 256, phone_log.txt); phone1.showInfo(); MobilePhone phone2(小米, 512, phone_log.txt); phone2.showInfo(); MobilePhone::showTotal(); return 0; }运行输出【构造函数】日志文件打开成功 【构造函数】已生产手机总数1 手机品牌华为存储256GB 【构造函数】日志文件打开成功 【构造函数】已生产手机总数2 手机品牌小米存储512GB 全部手机总产量2 【析构函数】文件已关闭 【析构函数】文件已关闭一、类内部代码逐词逐句拆解class MobilePhoneclassC 关键字告诉编译器接下来定义一个类图纸模板。MobilePhone类的名字自定义图纸名称。{}大括号划定类的代码范围类结束末尾必须写};分号不能丢。public:public访问修饰符代表下面的构造函数、成员函数对外公开main 函数可以访问调用。MobilePhone(string brand, int storage, string fileName) { m_brand brand; m_storage storage; logFile.open(fileName, ios::app); if(logFile.is_open()) { cout 【构造函数】日志文件打开成功 endl; logFile 新手机 m_brand 存储: m_storage GB endl; } else { cout 【构造函数】日志文件打开失败 endl; } phoneCount; cout 【构造函数】已生产手机总数 phoneCount endl; }MobilePhone构造函数名称必须和类名完全一致没有任何返回类型不能写 void/int。创建对象时自动调用。(string brand, int storage, string fileName)参数列表string brand形参 brand临时局部变量接收传入手机品牌。int storage形参 storage临时局部变量接收存储容量。string fileName形参 fileName临时局部变量接收日志文件名字。{}构造函数函数体对象诞生瞬间大括号里面所有代码依次执行。m_brand brand;、m_storage storage;初始化当前对象的成员变量最基础工作logFile.open(fileName, ios::app);打开日志文件申请系统资源不属于变量赋值。ios::app代表追加写入每次新增内容不覆盖旧内容。if(logFile.is_open())判断文件是否成功打开。logFile 新手机...往文件里写入文本把手机信息保存到磁盘。phoneCount;静态计数变量 1统计一共创建多少台手机属于统计逻辑。void showInfo() { cout 手机品牌 m_brand 存储 m_storage GB endl; }void返回类型函数执行完毕不返回数据。showInfo普通成员函数打印手机信息。()无参数调用时不需要传入数据。static void showTotal() { cout 全部手机总产量 phoneCount endl; }static静态关键字这个函数属于整个类不属于单个手机对象。showTotal静态成员函数查看手机总数量。~MobilePhone() { if(logFile.is_open()) { logFile.close(); cout 【析构函数】文件已关闭 endl; } }~MobilePhone析构函数名字是波浪号 类名。对象销毁的时候自动执行。logFile.close()关闭文件释放系统资源。配套理解构造函数创建对象、申请资源析构函数销毁对象、释放资源成对使用。private: string m_brand; int m_storage; ofstream logFile; static int phoneCount;private私有修饰符这些变量只能在当前类内部的函数访问main 不能直接读写。string m_brand;成员变量保存手机品牌。int m_storage;成员变量保存存储容量。ofstream logFile;文件输出流对象属于当前对象的成员用来写日志。static int phoneCount;静态成员变量不属于单个对象整个类共享这一个变量用来统计手机总数。int MobilePhone::phoneCount 0;::作用域解析运算符代表phoneCount属于MobilePhone类。静态成员变量必须写在类外面初始化设置初始值 0。二、main 函数逐词拆解重点MobilePhone phone1(华为, 256, phone_log.txt);MobilePhone phone1(华为, 256, phone_log.txt);MobilePhone类名使用 MobilePhone 这个图纸创建对象。phone1对象名在内存开辟一块空间存放 phone1 手机对象。(华为, 256, phone_log.txt)实参传递给构造函数。华为传给 brand256传给 storagephone_log.txt传给 fileName写完这一行自动执行构造函数里面全部代码赋值、打开文件、写入日志、计数 1。不需要手动调用构造函数。;分号语句结束标记。phone1.showInfo();phone1对象名代表操作 phone1 这个手机实例。.点号成员访问运算符读作 “的”访问对象内部成员。showInfo成员函数名字。()函数调用标记带括号代表执行函数内部代码。;语句结束。含义调用 phone1 的 showInfo 函数打印手机信息。MobilePhone phone2(小米, 512, phone_log.txt); phone2.showInfo();创建全新独立对象 phone2开辟新内存和 phone1 互不干扰。自动执行构造函数初始化 phone2 变量打开同一个日志文件追加写入总数再加 1。调用 showInfo 打印 phone2 信息。MobilePhone::showTotal();::作用域解析符调用静态函数查看全部手机总产量。return 0;main 函数执行结束phone1、phone2 对象销毁自动执行析构函数关闭文件。三、完整执行流程一步一步程序启动先初始化静态变量phoneCount 0。MobilePhone phone1(华为, 256, phone_log.txt);① 在内存开辟 phone1 对象内存。 ② 自动执行构造函数m_brand 华为m_storage 256打开日志文件向文件写入手机信息phoneCount 从 0 变成 1打印提示phone1.showInfo();打印 phone1 信息。MobilePhone phone2(小米, 512, phone_log.txt);① 开辟 phone2 对象内存 ② 自动执行构造函数初始化变量、打开文件、写入日志phoneCount 变成 2。phone2.showInfo();打印 phone2 信息。MobilePhone::showTotal();打印总产量。return 0;main 结束。 ① phone2 对象先销毁自动调用析构函数关闭 phone2 的文件 ② phone1 对象销毁自动调用析构函数关闭 phone1 的文件。四、知识点总结✅ 构造函数能干的事初始化对象的成员变量最常用入门教程只讲这个打开文件、网络连接、申请堆内存资源申请打印日志、统计计数、创建子对象核心本质对象出生那一刻自动运行的函数里面可以写任意合法 C 代码❌ 限制没有返回值不能 return 返回数据仅允许单独return;提前退出不能手动调用构造函数只有创建对象时编译器自动调用不建议写非常耗时的操作大文件读取、长时间网络等待会阻塞程序

相关新闻

Olares 上部署 DeerFlow 2.0:用 config.yaml 接入本地模型并运行 AI 深度研究

Olares 上部署 DeerFlow 2.0:用 config.yaml 接入本地模型并运行 AI 深度研究

云原生后端运维 【免费下载链接】Terminus Open-Source Personal Cloud OS for Always-On Agents 项目地址: https://gitcode.com/gh_mirrors/terminus2/Terminus 点击查看 免费下载 本文以 Olares 设备上的 DeerFlow 2.0 应用为核心,完整讲解如何从 Ma…

2026/10/16 9:15:30 阅读更多 →
抖音批量下载工具教程:4 条命令整站搬回主页,去水印还免费

抖音批量下载工具教程:4 条命令整站搬回主页,去水印还免费

抖音批量下载工具教程:4 条命令整站搬回主页,去水印还免费 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser…

2026/10/16 9:15:30 阅读更多 →
【链表-7】19.删除链表的倒数第N个结点

【链表-7】19.删除链表的倒数第N个结点

题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2:输入:head [1], n 1 输出:[]示…

2026/10/16 9:15:30 阅读更多 →

最新新闻

自提柜智能监控方案:从边缘网关部署到告警排查实战

自提柜智能监控方案:从边缘网关部署到告警排查实战

简介:面向智慧物流与自提柜运维场景的一份解决方案演示文档,聚焦快递自提柜故障无法实时监控、纠纷取证难、运营数据缺乏分析等痛点,给出从物流云平台、高清摄像机到NVR的统一监控架构。内容涵盖现状需求、方案设计、功能介绍与核心产品四大模…

2026/10/16 17:05:02 阅读更多 →
STM32F103C8T6驱动SSD1306 OLED黑屏排查与CubeMX精准配置指南

STM32F103C8T6驱动SSD1306 OLED黑屏排查与CubeMX精准配置指南

简介:本资源是一份面向STM32初学者与嵌入式开发者的OLED显示驱动实践工程,聚焦于STM32F103C8T6最小系统在CubeMX图形化配置下的I2C通信实现。资源完整覆盖从时钟树设置、I2C主机模式配置、引脚映射到代码生成的全流程,特别适合单片机课程设计…

2026/10/16 17:05:02 阅读更多 →
Air2Stream模型:用气温与流量预测河水温度的物理驱动MATLAB实现

Air2Stream模型:用气温与流量预测河水温度的物理驱动MATLAB实现

简介:本资源是基于MATLAB与Fortran混合实现的开源水文预测模型air2stream,面向环境科学、水文学及气候建模领域的科研人员与研究生,用于利用空气温度和河流流量数据高精度预测河水温度(RWT),支撑生态水温评…

2026/10/16 17:04:01 阅读更多 →
MATLAB R2025a部署避坑指南:从版本识别到许可证激活全解析

MATLAB R2025a部署避坑指南:从版本识别到许可证激活全解析

简介:MathWorks MATLAB R2025a v25.1.0.2943329(x64)的配套Crack文件包,主要面向已安装该版本但上轮发布缺失激活组件的用户,用于补齐授权验证所需的关键文件与许可证配置。压缩包共5个文件,约1.54MB&#…

2026/10/16 17:04:01 阅读更多 →
MATLAB实现经典代数多重网格AMG求解稀疏矩阵方程详解

MATLAB实现经典代数多重网格AMG求解稀疏矩阵方程详解

简介:经典代数多重网格(AMG)演示代码,面向数值计算、科学工程计算与偏微分方程数值解学习者,帮助理解如何以代数方式构造粗网格,加速稀疏线性方程组求解。资源为系统开源MATLAB实现,压缩包共20个…

2026/10/16 17:04:01 阅读更多 →
BrowserSkill本质:Chromium DevTools协议的CLI封装

BrowserSkill本质:Chromium DevTools协议的CLI封装

1. BrowserSkill不是浏览器插件,而是Chromium原生能力的CLI封装层你搜“BrowserSkill下载”“腾讯BrowserSkill”“Chrome插件BrowserSkill”,结果全是零散的报错日志、安装失败截图、CLI命令报错堆栈——这恰恰暴露了一个被广泛误解的事实:B…

2026/10/16 17:04:01 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →