## 今天学了什么今天学习C的静态成员函数/变量、C对象模型和this指针、空指针访问成员函数以及常函数、常对象。## 静态成员定义在成员变量和成员函数前加上关键字static。分类静态成员分为静态成员变量和静态成员函数。### 静态成员变量所有对象共享同一个数据在编译阶段分配内存类内声明类外初始化。#include iostream using namespace std; class Person { public: void func() { cout m_age endl; } static int m_age; }; int Person::m_age 100; //类外初始化 void test() { Person p; p.func(); } int main() { test(); return 0; }Ⅰ. 访问静态成员变量的方式有两种①通过对象进行访问Person p;p.m_a;②通过类名访问Person::m_aⅡ.有访问权限在private下的变量类外无法访问。### 静态成员函数不属于某个对象属于类所有对象共享同一个函数静态成员函数只能访问静态成员变量原因静态成员函数不属于任何对象没有this指针所以无法访问非静态成员。Ⅰ. 访问方式有两种①通过对象进行访问Person p;p.func();②通过类名访问Person::func();Ⅱ.有访问权限在private下的函数类外无法访问。## this指针类内的成员变量和成员函数分开储存只有非静态成员变量储存在类的对象上。*注空对象占用内存空间为1字节sizeof原因编译器会给每个空对象分配一个字节空间是为了区分空对象占用内存的位置每个空对象有一个独一无二的内存地址。this指针多个同类型对象会共用一块实例代码代码无法区分哪个对象调用自己this指针指向被调用的成员函数所属的对象用于解决以上问题。用途当形参和成员变量同名时可以用this指针区分在类的非静态成员函数中返回对象本身Person classfun(int b){this-b b;return *this;}可用于链式编程b.classfun(6).classfun(1).classfun(5); //输出结果12发现关于链式编程返回值必须加引用如果不加b的值不会叠加。原因返回*this 时不加 则返回拷贝了一个临时变量所以除了第一次b的值被修改以外后面的调用无效。## 空指针访问成员函数测试定义一个空指针分别访问带有/不带成员变量的函数#include iostream using namespace std; class Person { public: void showPersonaAge() { cout m_age endl; } void showClassName() { cout This is Person class. endl; } int m_age; }; void test() { Person *pNULL; p-showClassName(); p-showPersonaAge(); } int main() { test(); return 0; }运行报错在访问成员变量那下一个断点进调试发现this指针的地址一直为0导致运行出错。结论C中空指针可以调用成员函数成员函数放在代码段如果不访问成员变量代码能跑。在日常写代码中可用 ifthisnullptr) 增加代码建设性但更推荐在调用方保证指针非空。## 常函数/常对象### 常函数成员函数后加const。常函数内不可以修改成员属性;如果存在特殊情况需要修改成员属性则需在成员属性声明时在成员属性前加关键字 mutable。#include iostream using namespace std; class Person { public: void func() { m_age 10; cout 普通成员函数 m_age endl; } void fun () const { //m_age 10; //this-m_age 无法修改 cout 常函数 m_age endl; } int m_age0; }; void test() { Person p; p.func(); p.fun(); } int main() { test(); return 0; }在访问常函数处下一个断点进入调试发现this指针的类型为 const Person*这就是常函数无法修改成员属性的原因。### 常对象声明对象前加const。const Person p;** 常对象只能调用常函数 **原因常对象不能调用普通函数因为普通函数可以修改成员属性与const不能修改值产生冲突。
企业数字化 ERP 产品动态
相关推荐
WorkBuddy实战指南:15个可写进简历的AI桌面Agent项目 1. 这不是又一个“AI概念课”,而是一套可直接复用的桌面生产力操作系统WorkBuddy这个词最近在技术圈里出现的频率,已经快赶上当年“Docker”刚火起来时的状态了——不是因为大家突然都爱上了桌面应用,而是因为真正用过的人发现:它… · 2026/9/26 6:06:38
B+Tree如何扛住千万级数据检索?底层原理与工程实践详解 1. 先说结论:一棵BTree凭什么扛住千万级查询干这一行久了,你会发现面试官特别爱问一句:MySQL的InnoDB索引为什么用BTree,不用B-Tree,也不用红黑树?很多人在准备阶段能背出答案,但真到线上排查慢… · 2026/9/26 6:06:38
中介效应分析实操:逐步检验法与Sobel检验避坑指南 简介:中介效应检验是社会科学、心理学与市场营销实证研究中的常用分析工具。这份Word文档系统整理了逐步检验法、Sobel检验与Bootstrap检验的操作流程,面向需要完成中介效应分析或论文实证的高校师生与科研人员。文档从原理说明、方程设定到判定标准均有… · 2026/9/26 6:06:38
ThinkPHP+Laravel+Vue二手车销售平台开发实战 做二手汽车销售平台,一开始摆在面前的两条路就挺有意思。项目标题里同时挂了ThinkPHP和Laravel,很多同行看到第一反应是“这俩框架选一个不就完了吗”。实际做下来你会发现,真正落地的项目里,这个选择题背后牵扯的是团队技术栈、服… · 2026/9/26 7:56:47
无畏契约Vanguard启动报错全解析:从服务到驱动的排查与修复指南 1. 先搞清楚Vanguard到底在干什么很多人一看到无畏契约启动报错,第一反应就是“游戏坏了”,然后开始重装游戏、重装系统,折腾一整天问题还在。实际上,无畏契约的启动链路比大多数游戏复杂得多,它不是一个单纯的游戏客户… · 2026/9/26 7:56:35
iOS国密改造实战:OpenSSL集成SM2/SM4与避坑指南 简介:面向iOS平台国密算法开发者的实践参考,内容围绕SM2加密在iOS侧的落地展开,基于GmSSL改造整理,弥补了网上iOS端缺少可直接参考国密示例的空白。作者在C语言基础较弱、现有实现代码杂乱且缺少注释的条件下反复踩坑,… · 2026/9/26 7:56:35
手写SQL解析器:词法分析、AST与生产级选型实践 简介:基于Flex与Bison这两款开源编译器工具构建的SQL解析器完整工程,面向数据库内核研发和编译器技术学习者,提供从SQL语句输入到词法切分、语法检查、抽象语法树构建再到中间表示输出的完整实现参考。压缩包共包含11个文件,以四个… · 2026/9/26 7:56:29
金融技术服务项目启动前提与内容规范 我无法根据当前输入生成符合要求的博文。原因如下:项目标题为"financial-services",这是一个高度泛化的行业术语,本身不构成具体可操作、可拆解的项目或技术主题;项目正文为空,未提供任何实质性描述、功能定… · 2026/9/26 7:56:29
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46