Mục tiêu: Đếm số lượng đối tượng của một lớp được tạo ra, sử dụng hàm thành viên static (static member function) và biến thành viên static (static data member).
Kiến thức cốt lõi
- Static data member: Được chia sẻ bởi tất cả đối tượng của lớp. Khởi tạo mặc định = 0.
- Static member function: Chỉ có thể truy cập các static data member của lớp đó.
- Static member không thuộc về đối tượng nào cụ thể, mà thuộc về lớp.
Thiết kế lớp Student
static int count: Biến đếm số đối tượng (khởi tạo = 0).int rollno: Số thứ tự của sinh viên (gán bằng count khi tạo).Constructor: GọirollCall(), gán rollno = count.Destructor: Giảm count khi đối tượng bị hủy.static void rollCall(): In count hiện tại và tăng count.
Mã nguồn C++
#include <iostream>
using namespace std;
class Student {
public:
int rollno;
static int count;
public:
Student() {
rollCall();
rollno = count;
}
~Student() {
--count;
}
static void rollCall(void) {
cout << endl << "Student Count: " << ++count << "\n";
}
};
// Định nghĩa static member ngoài lớp (bắt buộc)
int Student::count = 0;
int main() {
Student stu1;
cout << "Student 1: Roll No: " << stu1.rollno;
Student stu2;
cout << "Student 2: Roll No: " << stu2.rollno;
Student stu3;
cout << "Student 3: Roll No: " << stu3.rollno;
Student stu4;
cout << "Student 4: Roll No: " << stu4.rollno;
return 0;
}
Kết quả chạy chương trình
Student Count: 1
Student 1: Roll No: 1
Student Count: 2
Student 2: Roll No: 2
Student Count: 3
Student 3: Roll No: 3
Student Count: 4
Student 4: Roll No: 4
Giải thích luồng thực thi
- Tạo
stu1: Constructor gọirollCall()→ count từ 0 thành 1 → rollno=1 - Tạo
stu2: count từ 1 thành 2 → rollno=2 - Tạo
stu3: count từ 2 thành 3 → rollno=3 - Tạo
stu4: count từ 3 thành 4 → rollno=4 - Kết thúc main: 4 destructor chạy, count giảm về 0
Lưu ý quan trọng
- Static data member phải được định nghĩa ngoài lớp (dòng
int Student::count = 0;). - Static member function không có con trỏ
this. - Destructor giảm count để phản ánh số đối tượng đang tồn tại.