Static Data Members เป็นสมาชิกคลาสที่ประกาศด้วย static มีเพียง 1 ตัวต่อคลาส (Shared ทุก Object) เริ่มต้นเป็น 0 เมื่อสร้าง Object แรก
รูปแบบ
static data_type member_name;
ตัวอย่างโค้ดสมบูรณ์
#include <iostream>
#include <string>
using namespace std;
class Student {
int rollNo;
string name;
int marks;
public:
static int objectCount; // Declaration
Student() { objectCount++; }
void getdata() {
cout << "Enter roll number: "; cin >> rollNo;
cout << "Enter name: "; cin >> name;
cout << "Enter marks: "; cin >> marks;
}
void putdata() {
cout << "Roll: " << rollNo << ", Name: " << name
<< ", Marks: " << marks << endl;
}
};
int Student::objectCount = 0; // Definition (จำเป็น!)
int main() {
Student s1, s2, s3;
s1.getdata(); s1.putdata();
s2.getdata(); s2.putdata();
s3.getdata(); s3.putdata();
cout << "Total objects: " << Student::objectCount << endl;
return 0;
}
ผลลัพธ์ตัวอย่าง
Enter roll number: 1
Enter name: Mark
Enter marks: 78
Roll: 1, Name: Mark, Marks: 78
...
Total objects: 3
จุดสำคัญ
- Declaration ใน Class Definition:
static int objectCount; - Definition นอก Class (ใน Global Scope):
int Student::objectCount = 0; - เข้าถึงได้ผ่าน
ClassName::memberหรือobject.member - ไม่ต้องสร้าง Object ก็เข้าถึงได้ (ถ้า Public)
Use Cases
- นับจำนวน Object (Instance Counter)
- Shared Configuration/Settings
- Factory Pattern (Registry)
- Singleton Pattern