C++初阶(长期更新)第2讲:类和对象(上)
C初阶长期更新第2讲类和对象上跟着潼心走轻松拿捏C困惑通通走一去不回头~欢迎开始今天的学习内容你的支持就是博主最大的动力。博主主页潼心1412o-CSDN博客前言好了下面我们要进入C真正的核心内容。今天开始学习的类和对象也是C区别于C语言和其他语言最关键的一部分gogogo出发喽~一、类的定义1.1 类的定义定义class为定义类的关键字Stack为类的名字{}中为类的主体注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量类中的函数称为类的方法或者成员函数。为了区分成员变量⼀般习惯上成员变量会加⼀个特殊标识如成员变量前⾯或者后⾯加_ 或者 m开头注意C中这个并不是强制的只是⼀些惯例具体看公司的要求。C中struct也可以定义类C兼容C中struct的⽤法同时struct升级成了类明显的变化struct中可以定义函数⼀般情况下我们还是推荐⽤class定义类。定义在类⾯的成员函数默认为inline。1.2 访问限定符类的定义讲了那到底有什么作用呢?功能类是C实现封装的一种方式将对象的属性和方法结合在一块让对象更加完善通过访问权限选择性将其接口提供给外部用户使用访问限定符就是用来提供访问权限的有三种public private 和protectedpublic修饰的对象可以在类外被直接访问而protected和private不能直接访问访问限定符的访问权限作用域从该访问限定符出现开始到下一个访问限定符出现为止若没有作用域就到}即类结束1.3 类域类定义了一个新的作用域类所有成员都在类的作用域中在类外定义成员时需使用::作用域操作符指明属于哪个类域类域影响的是编译的查找规则找不到会编译报错二、实例化2.1 实例化概念实例化定义用类类型在物理内存中创建对象的过程称为类实例化出对象类是什么对于对象的一种抽象描述是一种模型一样的东西限定了类有哪些成员变量这些对象在类中只是进行了声明没有分配空间用类实例化出对象时这时才会给对象分配空间。类可以实例化多个对象就好比一张图纸可以造出许多房子即实例化出来的对象而图纸是不占据空间的只有房子才会占据空间用于存储内容2.2 对象的大小类对象只存储成员变量不存储成员函数及指针why首先函数编译后是一段指令对象中无法存储这些指令被存储在一个单独的区域代码段对象中若是非要存储只能存储函数指针而对象中是否有存函数指针的必要呢每个对象中的成员函数的指针都是一样的而要是用类实例化100个对象那么同样的函数指针就会重复存储100次十分浪费。实际上函数指针也是不需要存储的。后续会讲需要存储的场景类只存储成员变量怎么存储呢C规定类实例化的对象也必须符合内存对齐规则内存对齐规则第一个成员在与结构体/类偏移量为0的地址处其他成员变量要对齐在某一个数字对齐数的整数倍地址处对齐数编译器默认对齐数与该成员大小的较小值VS默认值为8结构体/类的总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍若嵌套结构体则嵌套结构体对敲到自己最大对齐数的整数倍结构体的整体大小就是所有最大对齐数包括嵌套结构体的对齐数的整数倍这里的1是占位作用给1个字节标识对象存在内存对齐意义以空间换时间提高效率三、this指针对于类中的成员函数函数体中没有关于不同对象的区分。那函数调用时怎么知道应该访问哪个对象呢C给了⼀个隐含的this指针解决这⾥的问题编译器编译后类的成员函数默认都会在形参第⼀个位置增加⼀个当前类类型的指针叫做this指针。⽐如Date类的Init的真实原型为 void Init(Date* const this, int year,int month, int day)类的成员函数中访问成员变量本质是通过this指针访问如Init函数中给_year赋值 this-_year year;C规定不能在实参和形参的位置显示地写this指针(编译时编译器会处理)但是可以在函数体内显示使用this指针四、综合题1.下面程序编译运行结果是 A、编译报错 B、运行崩溃 C、正常运行解析这道题的核心是空指针的解引用问题。如果空指针解引用就会触发运行报错注意在此处编译报错是万万不可选的。因为编译报错是语法问题在此处不涉及到语法错误。那么这道题是否有空指针解引用呢结合我们前面学过的内容我们知道p-Print()这条指令汇编层面实际上是call Print函数的地址。而我们知道函数地址并不存放在对象在此处即空指针指向的内容。所以在这里空指针并没有解引用也就不存在运行报错。答案选C2.下面程序编译运行结果是 A、编译报错 B、运行崩溃 C、正常运行这里因为我们前面知道在函数内部访问成员变量时都是通过this指针访问的this-_a而在这里this其实就是p在这里相当于发生了p这个空指针nullptr的解引用所以发生运行崩溃这里答案选B3.this指针存在内存哪个区域A. 栈 B.堆 C.静态区 D.常量区 E.对象⾥⾯我们知道在存放内容上栈stack用于存放局部临时变量局部数组函数形参堆Heap用于存放手动申请的动态内存即C中的malloc freeC中的new delete静态区用于存放全局变量和static修饰的局部静态变量常量区用于存储常量注意const修饰的具有常性的变量不代表常量不存放在常量区const只是编译器语法限制不允许赋值改写对象可以是栈上对象即局部普通对象也可以是堆上对象即new动态创建也可以是全局静态对象注意类的static成员变量不属于任何对象实例存放于静态区所有对象共享一份那我们首先可以确认的是this肯定不在对象里面我们前面讲过对象里面只存放成员变量this 是什么成员函数的隐含形参编译器自动给成员函数追加的第一个参数不属于具体对象通过this访问对象栈、堆里面的成员变量this永远指向调用该函数的对象本体栈对象、堆对象既然是形参this 指针是存储在栈上的。下面我们看一下具体怎么存的好了今天的学习内容就到这里啦谢谢你的陪伴我是潼心下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连球球了这对主播很重要~博主主页潼心1412o-CSDN博客

相关新闻

LangGraph核心:节点、边、状态的第一性原理

LangGraph核心:节点、边、状态的第一性原理

同一个 if/else,写进代码和画进一张图,区别在哪?LangGraph 把智能体逻辑还原成三个原语:节点函数、边条件判断、状态共享内存,文末附已实跑验证的最小实现。 1 为什么需要图:线性 Chain 表达不了「循环」 …

2026/10/19 10:33:23 阅读更多 →
宠物经济大厂Java面试实录:JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AI+RAG智能养宠助手,谢飞机三轮被虐哭(附完整答案解析)

宠物经济大厂Java面试实录:JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AI+RAG智能养宠助手,谢飞机三轮被虐哭(附完整答案解析)

宠物经济大厂Java面试实录:JDK17、Redis分布式锁、Kafka订单削峰、Seata分布式事务、Spring AIRAG智能养宠助手,谢飞机三轮被虐哭(附完整答案解析) 场景设定 公司:宠物经济独角兽「萌宠星球」——宠物电商、宠物医疗、…

2026/10/19 11:52:33 阅读更多 →
scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联

scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联

scrcpy 投屏指南:三步实现电脑控制手机的快速无缝互联 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 会议刚开场,手机突然弹出一连串通知,你想当场演示…

2026/10/19 11:53:16 阅读更多 →

最新新闻

野营用品租赁管理系统:基于SSM的库存与订单实战解析

野营用品租赁管理系统:基于SSM的库存与订单实战解析

野营用品租赁管理系统这个标题,我第一次看到时还觉得挺常规的,真动手做起来才发现它比想象中要麻烦不少。市面上做销售型电商系统的教程一抓一大把,但租赁类业务的核心逻辑完全不同:一个商品不是卖出去就结束了,而是要…

2026/10/20 12:29:17 阅读更多 →
深度学习革命:从神经网络逆袭到大模型时代的技术突围

深度学习革命:从神经网络逆袭到大模型时代的技术突围

人工智能最近这十几年的热闹,几乎都汇聚在一个词上:深度学习。神经网络这条技术路线,曾经被主流学术圈冷落了很多年,如今却成为视觉、语音、语言、决策等几乎所有AI子领域的基础底座。这个系列写到第三篇,我想认真梳理…

2026/10/20 12:29:17 阅读更多 →
rsync增量同步实战:核心机制、常用命令与备份架构

rsync增量同步实战:核心机制、常用命令与备份架构

rsync 这东西,属于那种"会用之后再也回不去"的命令。说白了,它就是 Linux 下做文件同步和增量备份的标配工具,能本地拷贝,也能走 SSH 把数据推到远程服务器,还能在传输时压缩、限速、断点续传,最…

2026/10/20 12:29:17 阅读更多 →
ChatGPT入门提示词指南:100个模板与实操技巧

ChatGPT入门提示词指南:100个模板与实操技巧

1. 为什么“入门提示词”值得单独拎出来讲1.1 一个被大多数人忽略的事实:工具再好,不会提问也白搭我接触过不少刚开始用 ChatGPT 的朋友,发现一个特别有意思的现象:大家注册完账号,打开对话框,第一反应往往…

2026/10/20 12:29:17 阅读更多 →
数据结构期末考试复习攻略:核心考点与算法解题套路

数据结构期末考试复习攻略:核心考点与算法解题套路

期末备考这段时间,最让人头大的课程里,数据结构绝对排得上号。“数据结构期末考试试题及答案”这个搜索词的热度每年都在涨,说明大家不是缺资料,而是缺一份能真正把知识点串起来、知道考什么、怎么答的复习思路。这篇文章我打算用…

2026/10/20 12:29:17 阅读更多 →
JavaScript Map与Set实战指南:性能优化与内存管理要点

JavaScript Map与Set实战指南:性能优化与内存管理要点

在实际开发里,Map和Set这俩内置对象常常被当成“高级特性”一笔带过。大多数教程讲到这里,无非是列一遍 API、丢几个控制台截图,然后就没了。可真到项目里高强度用它们的时候,你会发现一堆文档里查不到的细节:遍历顺序…

2026/10/20 12:28:17 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →