C++静态成员

C++静态成员详解

在同类的多个对象之间实现数据共享,往往使用静态成员而不是全局变量。

C++静态数据成员

1.1静态数据成员是一种特殊的数据成员。static int height;
1.2静态数据成员可以通过类名来引用,也可以通过对象来引用。
1.3静态数据成员不属于某一个对象,静态数据成员的存储空间是在静态存储区的,与一般的对象不同。
1.4静态数据成员和对象的建立与销毁没有直接的关系,静态数据成员是在程序编译时分配空间,在程序结束时才释放空间。
1.5静态成员可以初始化,但只能在类体外进行初始化。
int Box::height = 10;

C++静态成员函数

1.1静态成员函数可以通过类名调用,也可以通过对象来调用。
Box::volume();
a.volume();
1.2非静态函数有this指针,而静态函数没有this指针。
1.3非静态成员函数可以引用静态成员,也可以引用非静态数据成员,但是程序里面最好只引用静态成员,使代码更加的清晰。


C++ 中,静态成员变量和静态成员函数是类的一部分,但它们独立于类的任何对象实例。这些成员可以在没有类实例的情况下直接通过类名访问。 ### 静态成员变量 静态成员变量是类的所有对象共享的变量。它们在类的所有实例之间共享相同的值。静态成员变量必须在类外初始化,即使它们在类内声明了。 - **特点**: - 静态成员变量属于类而不是类的实例。 - 它们可以在类的所有实例之间共享。 - 静态成员变量必须在类外初始化,通常在实现文件中进行[^1]。 例如,考虑一个简单的类 `CRectangle` 包含两个静态成员变量: ```cpp class CRectangle { private: int w, h; static int nTotalArea; static int nTotalNumber; public: static void PrintTotal(); }; ``` 在这个例子中,`nTotalArea` 和 `nTotalNumber` 是静态成员变量,并且需要在类外初始化[^4]。 ### 静态成员函数 静态成员函数可以访问静态成员变量,但不能访问非静态成员变量。静态成员函数可以通过类名直接调用,而不需要创建类的实例。 - **特点**: - 静态成员函数可以访问静态成员变量。 - 静态成员函数不能访问非静态成员变量。 - 静态成员函数可以通过类名调用,无需创建类的实例[^2]。 例如,继续上面的 `CRectangle` 类,我们可以定义静态成员函数 `PrintTotal`: ```cpp void CRectangle::PrintTotal() { // 访问静态成员变量 std::cout << "Total Area: " << nTotalArea << std::endl; std::cout << "Total Number: " << nTotalNumber << std::endl; } ``` 这个静态成员函数 `PrintTotal` 可以直接通过类名调用: ```cpp CRectangle::PrintTotal(); ``` ### 静态成员的权限 静态成员也有访问权限,如 `private`、`protected` 和 `public`。如果静态成员是私有的,则类外不能访问。此外,`const` 修饰的静态成员变量最好在类内部初始化,但也可以在类外初始化[^1]。 ### 静态成员函数的用途 静态成员函数主要用于管理静态数据成员,完成对静态数据成员的封装。它们在对象没有创建前即可通过类名调用,因此非常适合用于初始化或管理类级别的资源[^2]。 例如,静态成员函数可以用作回调函数,因为它们不依赖于类的实例: ```cpp class MyClass { public: static void callbackFunction() { // 回调逻辑 } }; // 使用静态成员函数作为回调 void registerCallback(void (*callback)()) { callback(); } int main() { registerCallback(MyClass::callbackFunction); return 0; } ``` 在这个例子中,`callbackFunction` 是一个静态成员函数,可以直接作为回调函数使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值