### C++中的静态成员 #### 一、静态成员的基本概念 在C++中,静态成员是一种特殊的成员,它不属于任何特定的对象实例,而是属于整个类。这意味着无论创建多少个类的实例,静态成员都只有一份拷贝。静态成员包括静态成员变量和静态成员函数。 #### 二、静态成员变量 ##### 1. 存储与共享 - **存储:** 静态成员变量在整个程序的生命周期内只被创建一次,并且存储在全局内存区域。 - **共享:** 所有的类实例共享同一份静态成员变量,因此它们之间可以共享该变量的数据。 ##### 2. 定义与声明 - **声明:** 在类的定义中,需要使用`static`关键字来声明静态成员变量。 - **定义:** 静态成员变量必须在类体外部进行定义,即使声明时已经初始化了。定义时不需要`static`关键字。 例如: ```cpp class Point { public: static int m_nPointCount; }; int Point::m_nPointCount = 0; // 定义 ``` ##### 3. 访问方式 - **通过类名访问:** `ClassName::staticMemberName` - **通过对象访问:** `object.staticMemberName` #### 三、静态成员函数 ##### 1. 特性 - **无需对象:** 静态成员函数可以在没有创建对象的情况下被调用。 - **访问限制:** 静态成员函数只能访问静态成员变量和其他静态成员函数,不能访问非静态成员。 ##### 2. 声明与定义 - **声明:** 类中声明静态成员函数时需使用`static`关键字。 - **定义:** 类外定义静态成员函数时不需要`static`关键字。 例如: ```cpp class Point { public: static void output(); }; void Point::output() { std::cout << "Output function called." << std::endl; } ``` ##### 3. 调用方式 - **通过类名调用:** `ClassName::staticFunctionName` - **通过对象调用:** `object.staticFunctionName` #### 四、使用示例及规则 **示例1:** 通过类名调用非静态成员函数会报错。 ```cpp class Point { public: void init() {} static void output() {} }; void main() { Point::init(); // 错误 Point::output(); // 正确 } ``` **结论:** 不能通过类名来调用非静态成员函数。 **示例2:** 通过对象同时调用静态成员函数和非静态成员函数。 ```cpp void main() { Point pt; pt.init(); // 正确 pt.output(); // 正确 } ``` **结论:** 对象可以同时调用静态成员函数和非静态成员函数。 **示例3:** 在静态成员函数中尝试访问非静态成员变量会导致错误。 ```cpp class Point { public: void init() {} static void output() { printf("%d\n", m_x); // 错误 } private: int m_x; }; ``` **结论:** 静态成员函数中不能引用非静态成员变量。 **示例4:** 在非静态成员函数中可以调用静态成员函数。 ```cpp class Point { public: void init() { output(); // 正确 } static void output() {} }; ``` **结论:** 非静态成员函数可以调用静态成员函数。 **示例5:** 使用类的静态成员变量。 ```cpp class Point { public: Point() { m_nPointCount++; } ~Point() { m_nPointCount--; } static void output() { printf("%d\n", m_nPointCount); } private: static int m_nPointCount; }; int Point::m_nPointCount = 0; ``` **结论:** 静态成员变量必须先初始化再使用。 #### 五、静态成员的总结 1. **静态成员函数不能访问非静态成员。** 2. **静态成员函数只能访问静态成员变量和其他静态成员函数。** 3. **静态成员变量必须先初始化再使用。** 4. **静态成员变量可以被所有对象共享,不破坏封装性和安全性。** 5. **非静态成员函数可以调用静态成员函数,但静态成员函数不能调用非静态成员函数。** 静态成员在C++编程中提供了一种高效的数据共享机制,同时也为程序设计带来了灵活性。理解并正确使用静态成员对于编写高质量的C++代码至关重要。
剩余6页未读,继续阅读
- 粉丝: 118
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助