承接上文上一节我们学习了class基础语法与public/private访问权限理解面向对象封装思想。本节拆解类内部两大核心组成成员变量、成员函数讲解二者的内存特性同时落地C类开发的工程编码规范养成干净、易维护的代码写法规避新同学常见编码陋习。学习说明类本质就是把**数据成员变量和操作数据的行为成员函数**打包在一起。成员变量描述对象有什么属性成员函数描述对象能做什么行为。 很多新手写类时随意命名、权限乱设埋下大量隐性bug。本节除语法外重点落地工程编码规范为后续构造函数、继承章节打好基础。本节学习目标分清成员变量、成员函数的概念理解成员函数的隐式this指针基础认知掌握成员访问规则类内任意访问类外只能访问public成员掌握类成员基础内存特性成员函数不属于单个对象多个对象共享同一份成员函数代码建立C类工程编码规范区分好习惯与不良写法一、成员变量属性成员变量用来保存对象自身的数据每个实例对象拥有独立一份成员变量。一般放在private禁止外部直接修改保证封装性命名规范推荐加前缀m_例如m_name、m_age一眼区分局部变量和成员变量#include iostream #include string using namespace std; class Person { private: // 成员变量私有外部不可直接访问 string m_name; int m_age; public: // setter 设置成员变量 void setName(string name) { m_name name; } void setAge(int age) { // 增加数据校验 if(age 0 age 150) { m_age age; } else { cout 年龄输入非法 endl; } } // getter 获取成员变量 string getName() { return m_name; } int getAge() { return m_age; } }; int main() { Person p1; p1.setName(张三); p1.setAge(20); cout p1.getName() p1.getAge() 岁 endl; return 0; }二、成员函数行为成员函数是类内部定义的函数用来操作本类的成员变量。成员函数代码存放在代码段所有对象共用一份成员函数不会每个对象都复制函数指令成员函数内部自带隐式this指针指向调用这个函数的对象实例成员函数可以访问本类所有成员不管是public还是privatethis指针简单理解p1调用setAge时this指向p1p2调用setAge时this指向p2。 完整this示例class Person { private: int m_age; public: void setAge(int age) { this-m_age age; // this-可以省略编译器自动补全 // 等价于 m_age age; } };三、核心内存特性重点每个对象独立分配成员变量内存对象之间互不干扰成员函数不占用对象内存多个对象共享函数代码this指针是成员函数形参编译阶段自动添加用来区分是哪个对象在调用函数验证小实验sizeof(Person)只会统计成员变量占用大小成员函数不计入。四、C类基础工程编码规范✅ 推荐规范成员变量默认放private对外提供getter/setter读写增加数据校验成员变量命名m_xxx前缀区分局部变量、全局变量类名采用大驼峰Person、Student成员函数小驼峰setName、getAge类定义末尾加分号新手高频漏写类的声明和实现分离简单示例可写一起工程项目建议头文件声明、cpp实现头文件与源文件分离极简示例// Person.h #pragma once #include string using namespace std; class Person { private: string m_name; public: void setName(string name); string getName(); };// Person.cpp #include Person.h void Person::setName(string name) { m_name name; } string Person::getName() { return m_name; }不推荐陋习把所有成员全部写public直接外部修改成员变量破坏封装成员变量和局部变量同名不做区分可读性差类定义末尾忘记分号引发诡异编译报错成员函数内不做参数校验任由非法数据写入成员变量五、高频坑点总结误区每个对象都会单独保存成员函数。 函数代码共享只有成员变量每个对象独立。类外只能访问public成员private成员只能在类内部访问。this指针仅存在于非静态成员函数中静态成员函数没有this指针后续章节讲解静态。对象创建后成员变量不会自动初始化直接使用会得到随机值。解决方法使用构造函数初始化下一节讲解。六、本节思考题一个类有2个对象p1、p2修改p1的m_age会不会影响p2的m_age为什么sizeof统计类大小的时候成员函数会不会占用空间为什么工程代码里成员变量优先放到private而不是publicclass Test { private: int m_val; public: void setVal(int val) { m_val val; } }; int main() { Test t; t.setVal(10); return 0; }问t调用setVal时this指针指向谁m_val val底层等价于什么写法下期预告下一节构造函数与初始化列表解决const、引用成员初始化坑点。
企业数字化 ERP 产品动态
相关推荐
CUDA 第一课: CUDA 第一课:
在C语言中, 文本编辑器 ——> 预处理 ——> hello.i ——> 编译 ——> hello.s ——> 汇编 ——> hello.o ——> 链接 ——> hello
预处理,解决 # C语言的库。 拼接成完整C代码。(还是C代码… · 2026/9/24 17:32:57
Linux系统篇38——线程(三) 线程的优缺点、数量取舍、切换成本和私有资源 📚 本文收录于「流浪」的系列专栏
🐧 Linux系统⚙️ C📊 数据结构与算法🐍 Python🔗 LangChain & LangGraph🗄️ MySQL 数据库🌿 Git 工具🌐 计算机网络🤖 AI&#… · 2026/9/24 17:32:57
DHCP服务器设计与实战:从IP分配到网络智能中枢 1. 什么是DHCP服务器:它不是“配IP的工具”,而是网络的呼吸中枢很多人第一次听说DHCP服务器,脑子里浮现的是“自动给电脑发IP地址的那个东西”。这没错,但太轻描淡写了——就像说心脏只是“泵血的肌肉”,忽略了它每分钟… · 2026/9/24 20:55:41
Zed AI代理驾驶舱实测:从Redux到Zustand的智能重构实践 过去两年我几乎把主流编辑器的AI能力都折腾了一遍,从Copilot到各种IDE插件,但真正让我觉得“AI开始像个同事而不是打字机”的,是Zed编辑器在2026年初落地的这套Agent能力。我花了两周时间,用它把一个中型React项目的状态管理从Red… · 2026/9/24 20:55:41
Python GIL深度解析:全局解释器锁的原理、影响与绕开方案 面试的时候被问到“Python的GIL是什么”,很多人的第一反应是:“全局解释器锁,多线程没法利用多核。”这个回答不能说错,但它就像把一座冰山描述成“水面上那块白色物体”。GIL背后牵扯到CPython的内存管理模型、垃圾回收机制、多线… · 2026/9/24 20:55:41
Cline 接入 Agnes AI 完整教程:从密钥配置到参数调优 最近我一直在折腾 AI 编码助手的接入方案,之前一直用各家编辑器自带的默认模型,总觉得差点意思。直到我把 Cline 接到了 Agnes AI 模型上,完整跑通了账号申请、密钥配置、参数调试这一条链路,才发现原来换一个模型服务对日常写代码… · 2026/9/24 20:55:41
课堂坐不住?班主任亲历:注意力与冲动行为的干预策略 做了十多年班主任,每个学期开学,总有家长会带着几乎一样的焦虑找上门:孩子坐不住,上课一会儿抠橡皮一会儿撕纸,老师讲重点的时候他在接同桌的话茬,排队总是往前挤,回家写作业更是屁股底下像有钉… · 2026/9/24 20:55:09
Python虚拟环境venv完整指南:创建、依赖管理与IDE集成排错 写这篇的时候手头正好有个项目踩了虚拟环境的坑,干脆把这几年用 venv 的经验一次性整理出来。无论你是刚装完 Python 准备写第一个脚本,还是已经在 PyCharm、VSCode 里被解释器路径搞到头大,这篇指南都值得花十分钟看完。先说清楚这篇东西能解… · 2026/9/24 20:55:09
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44