5.4.4 Các thành phần static của class

Tất cả các quy tắc trong các phần trước đây về class là đúng với các thành phần không tĩnh (non-static components) của class (cả biến và hàm thành viên). Ngôn ngữ C++ cho phép chúng ta định nghĩa các thành phần khác – đó là các thành phần tĩnh (static components).

Một thành phần tĩnh tồn tại trong suốt vòng đời của chương trình, và số lượng của các thành phần đó luôn luôn là một mà không phụ thuộc vào số lượng các instance của class. Chúng ta có thể nói rằng tất cả các instances của class chia sẻ cùng một thành phần tĩnh.

Chương trình sau đây giới thiệu một class với hai trường cùng kiểu dữ liệu: một static và một non-static

Biến Static ở phần public của Class chỉ là một khai báo. Điều này có nghĩa là nó phải có cả phần định nghĩa riêng biệt được thể hiện tường minh đi cùng với giá trị khởi tạo được đặt bên ngoài định nghĩa lớp.

Một lý do khác của việc định nghĩa biến static phải được tách rời khỏi thân class vì các biến static không thực sự là một phần của bất kỳ đối tượng nào. Trong chương trình của chúng tôi, chúng tôi làm điều này với một dòng code giữa thân của Class và hàm main. Xóa dòng này sẽ sinh ra lỗi đấy, không tin thử thì biết.

Chương trình trên sẽ cho ra kết quả sau đây trên màn hình:

Static = 1, NonStatic = 10

Static = 2, NonStatic = 20

Bạn có thể giải thích lý do tại sao không ?