Trong C++ không có khái niệm "lớp tĩnh" (static class) như trong C# hay Java. Cách tiếp cận gần nhất là một lớp chỉ chứa các thành viên dữ liệu tĩnh (static data members) và phương thức tĩnh (static methods).
Các thành viên dữ liệu tĩnh trong một lớp được chia sẻ bởi tất cả các đối tượng của lớp đó vì chỉ có một bản sao của chúng trong bộ nhớ, bất kể số lượng đối tượng của lớp. Các phương thức tĩnh trong một lớp chỉ có thể truy cập các thành viên dữ liệu tĩnh, các phương thức tĩnh khác hoặc các phương thức bên ngoài lớp.
Chương trình dưới đây minh họa các thành viên dữ liệu tĩnh và phương thức tĩnh trong một lớp C++.
Ví dụ
#include <iostream>
using namespace std;
class Example {
public:
static int a;
static int func(int b) {
cout << "Hàm thành viên tĩnh được gọi";
cout << "\nGiá trị của b là: " << b;
}
};
int Example::a = 28;
int main() {
Example obj;
Example::func(8);
cout << "\nGiá trị của thành viên dữ liệu tĩnh a là: " << obj.a;
return 0;
}
Kết quả
Hàm thành viên tĩnh được gọi Giá trị của b là: 8 Giá trị của thành viên dữ liệu tĩnh a là: 28
Hãy hiểu chương trình trên.
Trong lớp Example, a là thành viên dữ liệu tĩnh kiểu int. Phương thức func() là phương thức tĩnh in ra "Hàm thành viên tĩnh được gọi" và hiển thị giá trị của b. Đoạn mã minh họa như sau:
class Example {
public:
static int a;
static int func(int b) {
cout << "Hàm thành viên tĩnh được gọi";
cout << "\nGiá trị của b là: " << b;
}
};
int Example::a = 28;
Trong hàm main(), một đối tượng obj được tạo từ lớp Example. Hàm func() được gọi bằng tên lớp và toán tử phân giải phạm vi (::). Sau đó giá trị của a được hiển thị.
int main() {
Example obj;
Example::func(8);
cout << "\nGiá trị của thành viên dữ liệu tĩnh a là: " << obj.a;
return 0;
}