返回

C/C++隐藏知识--类方法与数据权限种类

后端





C/C++中,类方法与数据可以拥有不同的权限,包括publicprotectedprivate。这三种权限控制着访问权限,决定了哪些代码可以访问这些方法和数据。

publicpublic权限是最宽松的,它允许任何代码访问类中的方法和数据。这意味着,无论代码属于哪个类,它都可以调用类中的public方法和访问类中的public数据。

protectedprotected权限比public权限严格,它只允许类本身及其派生类访问类中的方法和数据。这意味着,如果一个类派生自另一个类,那么派生类可以访问父类的protected方法和数据,但其他代码不能。

privateprivate权限是最严格的,它只允许类本身访问类中的方法和数据。这意味着,无论代码属于哪个类,它都不能访问类中的private方法和数据。

### 权限的用法

* public权限通常用于类中那些需要被其他代码访问的方法和数据。例如,一个类的构造函数通常是public的,因为其他代码需要通过构造函数来创建该类的对象。
* protected权限通常用于类中那些只允许类本身及其派生类访问的方法和数据。例如,一个类的实现细节通常是protected的,因为其他代码不需要了解这些细节。
* private权限通常用于类中那些只能由类本身访问的方法和数据。例如,一个类的内部状态通常是private的,因为其他代码不需要知道这些状态。

### 权限的总结

| 权限 | 访问权限 |
|---|---|
| public | 任何代码 |
| protected | 类本身及其派生类 |
| private | 类本身 |

### 实例

```c++
class MyClass {
public:
  void publicMethod() {
    // 代码
  }

  int publicData;

protected:
  void protectedMethod() {
    // 代码
  }

  int protectedData;

private:
  void privateMethod() {
    // 代码
  }

  int privateData;
};

class MyDerivedClass : public MyClass {
public:
  void derivedMethod() {
    protectedMethod(); // 可访问
    protectedData; // 可访问
  }
};

int main() {
  MyClass object;

  object.publicMethod(); // 可访问
  object.publicData; // 可访问

  //object.protectedMethod(); // 不可访问
  //object.protectedData; // 不可访问

  //object.privateMethod(); // 不可访问
  //object.privateData; // 不可访问

  MyDerivedClass derivedObject;

  derivedObject.publicMethod(); // 可访问
  derivedObject.publicData; // 可访问

  derivedObject.protectedMethod(); // 可访问
  derivedObject.protectedData; // 可访问

  //derivedObject.privateMethod(); // 不可访问
  //derivedObject.privateData; // 不可访问

  return 0;
}

在这个示例中,MyClass类定义了一个publicMethod方法、一个publicData数据成员,一个protectedMethod方法、一个protectedData数据成员,以及一个privateMethod方法和一个privateData数据成员。MyDerivedClass类派生自MyClass类。

main函数中,我们创建了一个MyClass对象和一个MyDerivedClass对象。然后,我们调用这些对象的各种方法和访问这些对象的数据成员。

如您所见,public方法和数据成员可以被任何代码访问,protected方法和数据成员只能被类本身及其派生类访问,private方法和数据成员只能被类本身访问。

理解C/C++中的权限控制机制非常重要,它可以帮助您编写更安全、更可靠的代码。