首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
C++学习日记 Day6:静态成员+this指针+空指针+常函数/常对象
📅 2026/9/26 6:06:43
✍️ 爱科研究院
👁 阅读 3,247
## 今天学了什么今天学习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不能修改值产生冲突。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/26 6:01:42
电磁场分析数理基础:从麦克斯韦方程组到边界条件
2026/9/26 6:01:42
从零搭建Claude Code模板库:让AI编程更可控的完整实践
2026/9/26 6:01:42
RK3588/RK3576取消LVDS背后:显示接口演进与桥接方案实战
2026/9/26 7:01:45
MyBatis查询性能骤降80%?警惕selectByExampleWithBLOBs大字段陷阱
2026/9/26 7:01:45
腾讯混元3.5接入OnSolo:AI工作流与3D资产生成实践
2026/9/26 7:01:45
Java项目编译原理与实战:从javac到Maven构建
2026/9/26 7:01:45
金融系统设计实战:账户体系、交易链路与风控合规全解析
2026/9/26 7:01:45
【dz-1176】基于单片机的老人居家安全监测助手的设计与实现
2026/9/26 6:56:45
广州知名的非标定制齿轮源头工厂推荐 特殊结构适配加工厂筛选名录
2026/9/26 0:00:44
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
2026/9/26 0:00:44
【愚公系列】《OpenClaw实战指南》018-写作与整理:用 TaoToken 统一 Key 打通 OpenClaw Skill 周报公文流水线
2026/9/26 0:00:44
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
2026/9/25 5:41:44
深入解析Transformer多头注意力机制与工程优化
2026/9/25 5:41:44
OpenClaw 的 Skills 跑学习任务,模型通道改到 TaoToken 通道行不行?
2026/9/25 5:41:44
ChatGPT报错Oops, an error occurred! 全链路排查指南