3.5 ĐIỀU KHIỂN TRUY CẬP TỚI CÁC THÀNH VIÊN

Các thuộc tính truy cập public private (và protected chúng ta sẽ xem xét sau) được sử dụng đđiều khiển truy cập tới các thành viên dữ liệu và các hàm thành viên của lớp. Chế độ truy cập mặc định đối với lớp là private vì thế tất cả các thành viên sau phần header của lớp và trước nhãn đầu tiên là private. Sau mỗi nhãn, chế độ mà được kéo theo bởi nhãn đó áp dụng cho đến khi gặp nhãn kế tiếp hoặc cho đến khi gặp dấu móc phải (}) của phần định nghĩa lớp. Các nhãn public, private protected có thể được lặp lại nhưng cách dùng như vậy thì hiếm có và có thể gây khó hiểu.

Các thành viên private chỉ có thể được truy cập bởi các hàm thành viên (và các hàm friend) của lớp đó. Các thành viên public của lớp có thể được truy cập bởi bất kỳ hàm nào trong chương trình.

Mục đích chính của các thành viên public để biểu thị cho client của lớp một cái nhìn của các dịch vụ (services) mà lớp cung cấp. Tập hợp này của các dịch vụ hình thành giao diện public của lớp. Các client của lớp không cần quan tâm làm thế nào lớp hoàn thành các thao tác của nó. Các thành viên private của lớp cũng như các định nghĩa của các hàm thành viên public của nó thì không phải có thể truy cập tới client của một lớp. Các thành phần này hình thành sự thi hành của lớp.

Ví dụ 3.5: Chương trình sau cho thấy rằng các thành viên private chỉ có thể truy cập thông qua giao diện public sử dụng các hàm thành viên public.

CT3_5.CPP

1: #include <iostream.h>

2:

3: class MyClass

4: {

5: private:

6: int X,Y;

7: public:

8: void Print();

9: };

10:

11: void MyClass::Print()

12: {

13: cout <<X<<Y<<endl;

14: }

15:

16: int main()

17: {

18: MyClass M;

19:

20: M.X = 3; //Error: 'MyClass::X' is not accessible

21: M.Y = 4; //Error: 'MyClass::Y' is not accessible

22: M.Print();

23: return 0;

24: }

Khi chúng ta biên dịch chương trình này, compiler phát sinh ra hai lỗi tại hai dòng 20 và 21 như sau:

Hình 3.5: Thông báo lỗi của ví dụ 3.5

Thuộc tính truy cập mặc định đối với các thành viên của lớp là private. Thuộc tính truy cập các thành viên của một lớp có thể được thiết lập rõ ràng là public, protected hoặc private. Thuộc tính truy cập mặc định đối với các thành viên của struct public. Thuộc tính truy cập các thành viên của một struct cũng có thể được thiết lập rõ ràng là public, protected hoặc private.

Truy cập đến một dữ liệu private cần phải được điều khiển cẩn thận bởi việc sử dụng của các hàm thành viên, gọi là các hàm truy cập (access functions).