新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++初阶(长期更新)第3讲:类和对象(中)

发布时间:2026/10/1 10:00:17来源:尧图网络
C++初阶(长期更新)第3讲:类和对象(中)
C初阶长期更新第3讲类和对象中跟着潼心走轻松拿捏C困惑通通走一去不回头~欢迎开始今天的学习内容你的支持就是博主最大的动力。博主主页潼心1412o-CSDN博客前言今天继续学习的类和对象gogogo出发喽~3.1 类的默认成员函数用户没有显式实现编译器自动生成的成员函数。一个类默认生成的成员函数有6个我们重点学习前4个三类分别为初始化和清理:构造函数、析构函数拷贝复制拷贝构造、赋值重载取地址重载不做讲解3.2 构造函数对象实例化时初始化对象本质为代替Init函数功能特点1.函数名与类名相同2.无返回值3.对象实例化系统自动调用对应构造函数4.可以重载5.没有显式定义C编译器会自动生成无参默认构造函数显式定义则不生成#includeiostream using namespace std; //日期类 class Date { public: //无参构造 Date() { _year 1; _month 1; _day 1; } //带参构造 Date(int year, int month, int day) { _year year; _month month; _day day; } //全缺省构造 /*Date(int year 1,int month 1, int day 1) { _year year; _month month; _day day; }*/ void Print() { cout _year / _month / _day endl; } private: int _year; int _month; int _day; }; int main() { Date d1; d1.Print(); Date d2(2026,9,29); d2.Print(); return 0; }注意Date d1无参不要带括号带括号会被当做函数声明报错类似Date func();对象实例化一定会调用对应构造保证对象实例化出来一定被初始化不写构造系统会生成无参的默认构造注意带参的无法调用6.无参构造、全缺省构造、不显式定义编译器默认生成的构造都叫默认构造函数但不可同时存在不传参就可以调用的就是默认构造无参构造和全缺省构造虽然构成函数重载但调用会存在歧义因为全缺省同样可以不传参调用7.编译器默认生成构造 对于内置类型初始化没有要求是否初始化不确定对于自定义类型默认构造要求调用成员变量的默认构造函数初始化VSCode默认生成的无参构造如图存放随机值#includeiostream using namespace std;、 //栈类 typedef int STDatatype; class Stack { public: Stack(int n4) { STDatatype* temp (STDatatype*)malloc(sizeof(STDatatype) * n); if (temp nullptr) { perror(malloc fail!); return; } _a temp; _capacity n; _top 0; } private: STDatatype* _a; size_t _capacity; size_t _top; }; //两个Stack实现队列 class MyQueue { public: //编译器默认生成构造调用成员变量Stack的构造函数 private: Stack pushst; Stack popst; }; int main() { Stack s1; MyQueue q1; return 0; }3.3 析构函数析构函数不是销毁对象而是完成对象中需要动态申请的资源的清理释放工作。销毁对象比如说局部对象存在栈帧上函数结束栈帧销毁自动释放对象销毁。与析构函数功能需区别开来析构函数本质类似于Destory函数特点1.函数名为 ~类名2.无返回值3.⼀个类只能有⼀个析构函数。若未显式定义系统会⾃动⽣成默认的析构函数4.对象生命周期结束系统自动调用对应析构函数5.类中没有申请资源时析构函数可以不写直接使⽤编译器⽣成的默认析构函数如Date如 果默认⽣成的析构就可以⽤也就不需要显⽰写析构如MyQueue但是有资源申请时⼀定要 ⾃⼰写析构否则会造成资源泄漏如Stack6.⼀个局部域的多个对象C规定后定义的先析构~Stack() { cout ~Stack() endl; free(_a); _a nullptr; _capacity _top 0; }增加上面这段代码运行结果如下3.4 拷贝构造函数一个构造函数的第⼀个参数是⾃⾝类类型的引⽤且任何额外的参数都有默认值则此构造函数也叫做拷⻉构造函数也就是说拷⻉构造是⼀个特殊的构造函数。特点1.拷贝构造函数是构造函数的重载2.第一个参数必须是类类型对象的引用直接传值会报错语法逻辑上会引起无穷递归。因为传值调用本身就会调用拷贝构造见3可以有多个参数除第一个引用其他参数必须有缺省值3.C规定⾃定义类型对象进⾏拷⻉⾏为必须调⽤拷⻉构造所以这⾥⾃定义类型传值传参和传值返回都会调⽤拷⻉构造完成4.未显式定义编译器自动生成拷贝构造函数对内置类型进行浅拷贝/值拷贝(⼀个字节⼀个字节的拷⻉)自定义类型成员变量调用对应拷贝构造5.写析构就要写拷贝构造//...class Date public //拷贝构造 Date(const Date d) { _year d._year; _month d._month; _day d._day; } //... int main() { Date d1; d1.Print(); Date d2(2026,9,29); d2.Print(); Date d3 d1; d3.Print(); Date d4(d1); d4.Print(); return 0; }Stack(const Stack st) { _a (STDatatype*)malloc(sizeof(STDatatype) * st._capacity); if (_a nullptr) { perror(malloc fail!); return; } memcpy(_a, st._a, sizeof(STDatatype) * st._top); _capacity st._capacity; _top st._top; }// Stack若不显式实现拷贝构造⽤自动生成的拷贝构造完成浅拷贝// 会导致s1和s2⾥⾯的_a指针指向同⼀块资源析构时会析构两次程序崩溃//MyQueue⾃动⽣成的拷⻉构造会⾃动调⽤Stack拷⻉构造完成pushst / popst// 的拷⻉只要Stack拷⻉构造⾃⼰实现了深拷⻉他就没问题好了今天的学习内容就到这里啦谢谢你的陪伴我是潼心下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连球球了这对主播很重要~博主主页潼心1412o-CSDN博客
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Linux findfs 命令详解:通过卷标与 UUID 精准定位文件系统设备 2026/10/1 14:33:52

Linux findfs 命令详解:通过卷标与 UUID 精准定位文件系统设备

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 导读 在 Linux 服务器运维中…

阅读更多 →
公共卫生论文最难的不是找病例:把“流调 SOP“讲成一张卡 2026/10/1 14:33:46

公共卫生论文最难的不是找病例:把“流调 SOP“讲成一张卡

公共卫生专业的论文,最容易在评审环节被打回的一句评语是:"你的调查流程经得起同行复核吗?"公共卫生是一门强方法学的学科,研究的核心是人群层面的暴露—结局关系,而这种关系一旦讲不清楚,就可能…

阅读更多 →
在Ollama上运行DeepSeek V3:本地部署高级AI指南与TaoToken统一接入 2026/10/1 14:33:46

在Ollama上运行DeepSeek V3:本地部署高级AI指南与TaoToken统一接入

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

阅读更多 →
鹤壁口碑好的短视频代运营企业专业实力与用户口碑深度解析 2026/10/1 14:33:46

鹤壁口碑好的短视频代运营企业专业实力与用户口碑深度解析

鹤壁千度耀中网络科技有限公司,深耕本地数字化整合营销服务多年,专注为制造业工厂提供专业短视频代运营、内外贸官网建设及生成式引擎优化服务,是安阳、鹤壁、邯郸区域内聚焦实体工业企业的网络服务商。 从线下走访起步的本土服务商2020年公司…

阅读更多 →
CMP 40HX Windows 解锁工具使用教程:矿卡焕发新活力 2026/10/1 14:33:46

CMP 40HX Windows 解锁工具使用教程:矿卡焕发新活力

摘要:40HX 一键解锁工具是一款专为 40HX 矿卡设计的辅助软件,通过修改软件配置解除出厂时被限制的 PCIe 带宽和 Tensor 算力两道“软件锁”,让这张矿卡在游戏和 AI 计算场景下发挥出更接近其核心(TU106)应有的实力。使…

阅读更多 →
从启动到路由:拆解 Claude Code 这类 CLI 工具的分布式架构与 TaoToken 接入实践 2026/10/1 14:33:45

从启动到路由:拆解 Claude Code 这类 CLI 工具的分布式架构与 TaoToken 接入实践

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉