C++ 中的静态数据成员
C++ 中的静态数据成员
在 C++ 中,静态数据成员是类成员或类级变量,由该类的所有实例(对象)共享。这与常规数据成员不同,常规数据成员为每个类对象提供单独的副本。静态数据成员在整个类中只有一个副本,并且可以在所有实例之间共享,这意味着类的所有对象都可以访问和修改相同的值。
静态数据成员声明
以下语法用于在类中使用static 关键字声明静态数据成员。
class ClassName { public: static dataType staticMemberName; };
静态数据成员初始化
以下语法用于在类外部定义和初始化静态数据成员,使用 ClassName:: 作用域解析运算符完成。
dataType ClassName::staticMemberName = initialValue;
访问静态数据成员
静态数据成员可以通过两种方式访问,即:-
- 使用类名(推荐)
- 使用对象(不推荐)
下面我们将了解它们之间的区别以及它们的语法和示例。
使用类名访问静态数据成员
这是访问静态数据成员非常常见且首选的方式,即使用作用域解析运算符 ::
语法
其语法如下。
ClassName::staticDataMember;
使用对象访问静态数据成员
您也可以使用对象访问静态数据成员,但通常不建议这样做,因为静态成员独立于任何特定对象,使用对象可能会产生误导。
语法
其语法如下。
objectName.staticDataMember;
示例
以下是 C++ 中静态数据成员的示例。
#include <iostream> #include <string> using namespace std; class Book { private: string title; // 书名 string author; // 书的作者 public: // 静态数据成员,用于跟踪图书馆的图书总数 static int totalBooks; // 构造函数,用于初始化图书的标题和作者 Book(string bookTitle, string bookAuthor) { title = bookTitle; author = bookAuthor; totalBooks++; // 每次创建新图书时,totalBooks 值递增 } // 静态方法,用于显示图书总数 static void displayTotalBooks() { cout << "Total number of books in the library: " << totalBooks << endl; } // 显示书籍信息的方法 void displayBookInfo() { cout << "Book Title: " << title << ", Author: " << author << endl; } }; // 在类外初始化静态数据成员 int Book::totalBooks = 0; int main() { // 创建书籍对象(添加到图书馆的书籍) Book book1("The Catcher in the Rye", "J.D. Salinger"); Book book2("To Kill a Mockingbird", "Harper Lee"); Book book3("1984", "George Orwell"); // 使用静态方法显示图书总数 Book::displayTotalBooks(); // 显示每本书的详细信息 book1.displayBookInfo(); book2.displayBookInfo(); book3.displayBookInfo(); // 向图书馆添加更多图书 Book book4("Pride and Prejudice", "Jane Austen"); Book book5("The Great Gatsby", "F. Scott Fitzgerald"); // 显示更新后的书籍总数 Book::displayTotalBooks(); return 0; }
输出
Total number of books in the library: 3 Book Title: The Catcher in the Rye, Author: J.D. Salinger Book Title: To Kill a Mockingbird, Author: Harper Lee Book Title: 1984, Author: George Orwell Total number of books in the library: 5
静态数据成员的用例
C++ 中的静态数据成员是指那些可以被类的所有实例访问的变量的名称。也就是说,它们不与任何对象绑定。让我们来看看它的一些常见用例。
1. 跟踪对象创建
静态数据成员的一个非常常见的用途是跟踪类的实例或对象的数量。
2. 维护全局配置或设置
这些用于创建全局设置或配置组件,这些组件需要在任何上下文中被类的所有实例访问。
3. 缓存或共享资源管理
静态数据成员还可用于管理系统中的共享资源或缓存,在这种情况下,多个对象可能会访问同一资源。
4.实现像单例这样的设计模式
实现像单例这样的设计模式也非常有利,因为这种模式通常使用静态数据成员来确保整个程序中只有一个类的实例。静态成员保存的是该类的唯一实例。
5. 跨对象跟踪全局计数器或操作
它还有助于跟踪特定对象或操作的全局计数,例如统计登录次数、交易次数或事件次数。