Các thuộc tính truy cập public và 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 và 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 là để 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
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.
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.
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).
Ví dụ 3.4: Chương trình thể hiện 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.
#include <iostream.h> class MyClass { private: int X,Y; public: void Print(); }; void MyClass::Print() { cout <<X<<Y<<endl; } int main() { MyClass M;
M.X = 3; //Error: 'MyClass::X' is not accessible M.Y = 4; //Error: 'MyClass::Y' is not accessible M.Print();
return 0; }
Gọi một hàm thành phần trong một hàm thành phần khác:
Có thể gọi hàm thành phần từ một hàm thành phần khác trong cùng lớp đó. Khi muốn gọi một hàm tự do trùng tên và danh sách tham số ta phải sử dụng toán tử phạm vi “::”.
Truy nhập đến các thành phần private trong đối tượng
Hàm thành phần có quyền truy nhập đến các thành phần private của đối tượng gọi nó. Xem định nghĩa hàm thành phần point::init():
void point::int(int abs,int ord) { x=abs;
y=ord; }
Truy nhập đến các thành phần private trong các tham số là đối tượng truyền cho hàm thành phần.
Hàm thành phần có quyền truy nhập đến tất cả các thành phần private của các đối tượng,
tham chiếu đối tượng hay con trỏ đối tượng có cùng kiểu lớp khi được dùng là tham số hình thức của nó.
class point { int x,y; public: ...
/* Các đối tượng được truyền theo giá trị của chúng */
int coincide(point pt)
{return(x==pt.x && y==pt.y);}
/* Các đối tượng được truyền bằng địa chỉ */
int coincide(point *pt)
{return(x==pt->x && y==pt->y);}
/* Các đối tượng được truyền bằng tham chiếu */
int coincide(point &pt)
{return(x==pt.x && y==pt.y);} }
Dùng đối tượng như giá trị trả về của hàm thành phần hàm trong cùng lớp
Hàm thành phần có thể truy nhập đến các thành phần private của các đối tượng, con trỏ đối tượng, tham chiếu đối tượng định nghĩa bên trong nó.
class point { int x,y; public: ... point symetry() { point res; res.x=-x;res.y=-y; return res; } };