Bộ chỉ định quyền truy cập C ++
Access Specifier
Bây giờ, bạn đã khá quen thuộc với public
từ khóa xuất hiện trong tất cả các ví dụ về lớp của chúng tôi:
Thí dụ
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Từ public
khóa là một công cụ xác định quyền truy cập.
Các chỉ định truy cập xác định cách các thành viên (thuộc tính và phương thức) của một lớp có thể được truy cập. Trong ví dụ trên, các thành viên public
- có nghĩa là chúng có thể được truy cập và sửa đổi từ bên ngoài mã.
Tuy nhiên, nếu chúng ta muốn các thành viên ở chế độ riêng tư và ẩn với thế giới bên ngoài thì sao?
Trong C ++, có ba chỉ định truy cập:
public
- các thành viên có thể truy cập từ bên ngoài lớp họcprivate
- các thành viên không thể được truy cập (hoặc xem) từ bên ngoài lớp họcprotected
- các thành viên không thể được truy cập từ bên ngoài lớp, tuy nhiên, chúng có thể được truy cập trong các lớp kế thừa. Bạn sẽ tìm hiểu thêm về Thừa kế ở phần sau.
Trong ví dụ sau, chúng tôi chứng minh sự khác biệt giữa public
và private
các thành viên:
Thí dụ
class
MyClass {
public: // Public access
specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass
myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; //
Not allowed (private)
return 0;
}
Nếu bạn cố gắng truy cập vào một thành viên riêng tư, một lỗi sẽ xảy ra:
error: y is private
Lưu ý: Có thể truy cập các thành viên private của một lớp bằng cách sử dụng phương thức public bên trong cùng một lớp. Xem chương tiếp theo ( Đóng gói ) về cách thực hiện việc này.
Mẹo: Nên khai báo các thuộc tính lớp của bạn là riêng tư (thường xuyên nếu có thể). Điều này sẽ làm giảm khả năng chính bạn (hoặc người khác) làm sai mã. Đây cũng là thành phần chính của khái niệm Encapsulation mà bạn sẽ tìm hiểu thêm trong chương tiếp theo.
Lưu ý: Theo mặc định, tất cả các thành viên của một lớp private
nếu bạn không chỉ định mã xác định quyền truy cập:
Thí dụ
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};