注:若没有特指是 静态成员时,默认都是普通成员; 1 类中的普通成员 类中的成员变量 和 成员函数 是分开存储的。其中, 1)每个对象都有独立的成员变量;成员变量可以存储在 栈空间、堆空间、全局数据区; 2)所有对象共享类的成员函数;成员函数 只能存储在 代码段; 2 类中的静态成员(static) 类中的静态成员 1、用 static关键字 修饰; 2、可以用 类名::成员名 访问 静态成员; 3、静态成员 属于 整个类; 4、静态成员 是所属类的成员,其它类不能访问; 5、静态成员的内存分配 是 唯一的; 1) 静态成员变 在C++中,`static`关键字有着多重含义,特别是在类的上下文中,它用来定义静态成员变量和静态成员函数。让我们深入探讨一下这两个概念。 ### 静态成员变量 静态成员变量是属于整个类而不是类的任何特定实例的。这意味着,无论创建了多少个对象,静态成员变量只有一个副本,所有对象共享这个副本。以下是一些关于静态成员变量的关键点: 1. **唯一性**:静态成员变量在内存中只有一份,存储在全局数据区。 2. **访问方式**:可以通过类名直接访问,也可以通过对象名访问(如果权限允许)。 3. **生命周期**:静态成员变量的生命周期始于程序运行时,直到程序结束。 4. **初始化**:静态成员变量必须在类外定义和初始化,因为它们不是随着对象的创建而分配的。 5. **共享**:所有类的对象都共享同一个静态成员变量的值。 6. **安全性**:静态成员变量可以用于实现多个对象间的数据共享,同时保持封装性,因为它们不是对象的一部分,无法通过对象直接访问(除非声明为公有)。 下面是一个示例: ```cpp class Test { public: static int a; }; int Test::a = 1; int main() { Test t1, t2; cout << t1.a << endl; // 输出 1 cout << t2.a << endl; // 输出 1 Test::a = 2; cout << t1.a << endl; // 输出 2 cout << t2.a << endl; // 输出 2 } ``` ### 静态成员函数 静态成员函数与非静态成员函数的主要区别在于,它们不与任何特定对象关联,它们可以没有`this`指针。这带来以下特点: 1. **无`this`指针**:静态成员函数不能访问非静态成员变量,因为它们不知道哪个对象正在调用它们。 2. **访问权限**:静态成员函数可以访问类内的所有静态成员,包括私有和保护的。 3. **使用场景**:常用于提供类的工具函数,或者在不涉及类实例的状态时的操作。 下面是一个例子: ```cpp class Test { public: static void print() { /* 不依赖this指针 */ } }; int main() { Test::print(); // 可以直接通过类名调用 } ``` ### 特殊用法 - 静态成员变量可以作为其他函数(包括静态成员函数)的默认参数。 - 静态成员变量可以是类类型的实例(指针或引用),但普通成员变量不能直接声明为类类型,只能是类类型的指针或引用。 ### const 函数与静态成员变量 在`const`成员函数中,普通成员变量是不可修改的,因为`const`修饰的是当前对象。然而,静态成员变量不受此限制,因为它们不属于任何对象,而是属于整个类。 总结来说,`static`关键字在C++中提供了类的静态成员变量和函数,使得我们可以实现跨对象的数据共享和不依赖对象状态的函数。理解和合理使用`static`关键字是提升C++编程技能的重要一环。
- 粉丝: 8
- 资源: 951
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助