Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số đối tượng dùng hàm thành viên static trong C++

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ọi rollCall(), 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

  1. Tạo stu1: Constructor gọi rollCall() → count từ 0 thành 1 → rollno=1
  2. Tạo stu2: count từ 1 thành 2 → rollno=2
  3. Tạo stu3: count từ 2 thành 3 → rollno=3
  4. Tạo stu4: count từ 3 thành 4 → rollno=4
  5. 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.