Bộ xác định quyền truy cập C++
Bộ xác định quyền truy cập
Đến bây giờ, bạn đã khá quen thuộc với từ khóa public
xuất hiện trong tất cả các ví dụ về lớp của chúng tôi:
Ví dụ
class MyClass { // The class
public: // Access specifier
// class members goes here
};
Hãy tự mình thử » Từ khóa public
là một công cụ xác định quyền truy cập. Bộ xác định quyền 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 là 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 được riêng tư và ẩn mình với thế giới bên ngoài thì sao?
Trong C++, có ba bộ xác định quyền truy cập:
-
public
- các thành viên có thể truy cập được từ bên ngoài lớp học -
private
- các thành viên không thể được truy cập (hoặc xem) từ bên ngoài lớp -
protected
- 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ề Kế thừa sau.
Trong ví dụ sau, chúng tôi chứng minh sự khác biệt giữa các thành viên public
và private
:
Ví 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 một thành viên riêng tư, sẽ xảy ra lỗi:
error: y is private
Lưu ý: Có thể truy cập các thành viên riêng tư của một lớp bằng phương thức công khai 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: Việc khai báo các thuộc tính lớp của bạn là riêng tư được coi là cách tốt (thường xuyên nhất 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 Đóng gói 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ả thành viên của một lớp đều ở private
nếu bạn không chỉ định công cụ xác định quyền truy cập:
Ví dụ
class
MyClass {
int x; // Private attribute
int y; // Private attribute
};