2011-01-31 39 views
29

Các lớp học trong C++ có thể được khai báo như thế nào public, private hoặc protected?Các lớp C++ (công khai, riêng tư và được bảo vệ)

+1

Như trong, bạn có muốn ai đó không thể sử dụng một lớp học không? Một lớp có thể được phân lớp: tức là lớp A {private: class B {}; }; –

+0

Điều này có thể hữu ích cho bạn: http://www.linuxquestions.org/questions/programming-9/public-private-protected-c-215399/#post1098220 – KyleWpppd

+0

Tại sao có một cuộc bỏ phiếu gần cho câu hỏi này? Điều này có vẻ như một câu hỏi hoàn toàn hợp lý để hỏi. – templatetypedef

Trả lời

36

Trong C++ không có khái niệm về toàn bộ một lớp có một truy cập specifier cách mà có trong Java hoặc C#. Nếu một đoạn mã có khả năng hiển thị của một lớp, nó có thể tham chiếu tên của lớp đó và thao tác nó. Điều đó nói rằng, có một vài hạn chế về điều này. Chỉ vì bạn có thể tham chiếu một lớp không có nghĩa là bạn có thể khởi tạo nó, ví dụ, vì hàm tạo có thể được đánh dấu riêng. Tương tự, nếu lớp là một lớp lồng nhau được khai báo trong phần riêng tư hoặc được bảo vệ của lớp khác, thì lớp đó sẽ không thể truy cập được bên ngoài lớp đó và bạn bè của lớp đó.

5

Điều đó tùy thuộc vào ý bạn là thành viên hoặc thừa kế. Bạn không thể có số 'private class', như vậy.

class Foo 
{ 
public: 
Foo() {} //public ctr 
protected: 
void Baz() //protected function 
private: 
void Bar() {} //private function 
} 

Hoặc thừa kế:

class Foo : public Bar 
class Foo : protected Bar 
class Foo : private Bar 
22

Bằng cách làm tổ một lớp bên trong một:

class A 
{ 
public: 
    class B {}; 
protected: 
    class C {}; 
private: 
    class D {}; 
}; 
4

Bạn có thể triển khai "các lớp riêng" bằng cách không xuất bản giao diện của mình cho khách hàng.

Tôi biết không có cách nào để tạo "lớp được bảo vệ".

Các vấn đề liên quan