C++【成员变量、成员函数、this指针】
C++ 成员变量与成员函数归属知识卡片
1. 成员变量归属
类型 | 归属 | 存储位置 | 访问方式 | 生命周期 | 是否影响 sizeof(obj) |
---|---|---|---|---|---|
非静态成员变量 | 对象(实例) | 对象内存 | obj.member | 随对象创建/销毁 | 是 |
静态成员变量 | 类 | 全局数据区 | ClassName::member | 程序启动/结束时 | 否 |
关键点:
-
非静态成员变量每个对象独立一份,静态成员变量全局共享一份。
-
静态成员变量需在类外单独定义(如
int ClassName::member = 0;
)。
2. 成员函数归属
类型 | 归属 | this 指针 | 访问权限 | 调用方式 |
---|---|---|---|---|
非静态成员函数 | 逻辑属于类,调用依赖对象 | 有(指向当前对象) | 可访问所有成员(静态+非静态) | obj.func() |
静态成员函数 | 完全属于类 | 无 | 仅能访问静态成员 | ClassName::func() |
关键点:
-
非静态成员函数通过隐式
this
指针区分不同对象,代码在内存中仅存一份。 -
静态成员函数无
this
,不能访问非静态成员。
3. this
指针详解
-
作用:隐式指向当前调用对象的地址,实现成员函数操作不同对象的数据。
-
底层转换:
// 源码 obj.func(); → 编译器转换为 func(&obj);
-
特性:
-
在
const
成员函数中为const ClassName* const
类型。 -
可为
nullptr
(但解引用会导致未定义行为)。
-
-
与对象关系:每个对象调用非静态成员函数时自动绑定自己的
this
。
4. 综合对比
特性 | 非静态成员变量 | 静态成员变量 | 非静态成员函数 | 静态成员函数 |
---|---|---|---|---|
归属层级 | 对象 | 类 | 类(但依赖对象调用) | 类 |
内存分配 | 每对象一份 | 全局唯一 | 代码共享,this 绑定对象 | 代码共享 |
访问依赖实例? | 是 | 否 | 是 | 否 |
典型用途 | 对象独有状态(如年龄) | 类共享数据(如计数器) | 操作对象数据(如 get/set ) | 工具函数(如 Math::sqrt() ) |
5. 核心总结
-
成员变量:
-
非静态 → 对象级别,独立存储。
-
静态 → 类级别,全局共享。
-
-
成员函数:
-
非静态 → 需对象调用,隐含
this
。 -
静态 → 类直接调用,无
this
。
-
-
this
指针:-
是非静态成员函数区分不同对象的核心机制。
-
静态函数、友元函数均无
this
。
-
设计哲学:通过 this
和 static
关键字,C++ 高效实现了对象独立性与代码复用的平衡。