c++4.public|protected|private
大约 3 分钟
类(class)中
访问控制
Private自己可见|Protected自己和好友可见|Public所有人可见
- Public(公共):
- 成员声明为
public
的,可以在类的内部和外部访问。 - 对于类的用户来说,
public
成员是可见的,可以直接访问。
- 成员声明为
class MyClass {
public:
int publicVar; // 公共变量
void publicMethod() {
// 公共方法
}
};
- Protected(受保护的):
- 成员声明为
protected
的,可以在类的内部访问,也可以在派生类中访问,但不能在类的外部访问。 protected
成员对类的用户是不可见的,只有类的派生类能够访问。
- 成员声明为
class MyBaseClass {
protected:
int protectedVar; // 受保护的变量
void protectedMethod() {
// 受保护的方法
}
};
class MyDerivedClass : public MyBaseClass {
public:
void accessProtected() {
protectedVar = 10; // 在派生类中可以访问受保护的变量
protectedMethod(); // 在派生类中可以调用受保护的方法
}
};
- Private(私有的):
- 成员声明为
private
的,只能在类的内部访问,对于类的用户和派生类都是不可见的。 private
成员对类的用户和派生类都是不可见的。
- 成员声明为
class MyClass {
private:
int privateVar; // 私有变量
void privateMethod() {
// 私有方法
}
};
控制继承
Public继承: 如果派生类使用
public
关键字继承基类,那么基类中的public
和protected
成员在派生类中的访问权限不变,而private
成员在派生类中仍然是不可访问的。class Base { public: int publicMember; private: int privateMember; protected: int protectedMember; }; class Derived : public Base { // publicMember 在Derived中是public // privateMember 在Derived中仍然是不可访问的 // protectedMember 在Derived中是protected };
Protected继承: 如果派生类使用
protected
关键字继承基类,那么基类中的public
和protected
成员在派生类中的访问权限都变成了protected
,而private
成员仍然是不可访问的。class Base { public: int publicMember; private: int privateMember; protected: int protectedMember; }; class Derived : protected Base { // publicMember 在Derived中是protected // privateMember 在Derived中仍然是不可访问的 // protectedMember 在Derived中是protected };
Private继承: 如果派生类使用
private
关键字继承基类,那么基类中的public
和protected
成员在派生类中的访问权限都变成了private
,而private
成员仍然是不可访问的。class Base { public: int publicMember; private: int privateMember; protected: int protectedMember; }; class Derived : private Base { // publicMember 在Derived中是private // privateMember 在Derived中仍然是不可访问的 // protectedMember 在Derived中是private };
总结成表格:
访问 | 同一个类 | 派生类 | 外部的类 |
---|---|---|---|
Public | Yes | Yes | Yes |
Protected | Yes | Yes | No |
Private | Yes | No | No |