C++中类成员的访问权限

参考回答

C++中的类成员访问权限分为 publicprotectedprivate 三种,这些关键字用于控制类成员(属性和方法)对外部的访问级别:

  1. public(公有权限)
    • 成员可以被类的内部和外部直接访问。
    • 适合对外提供接口或功能。
  2. protected(保护权限)
    • 成员只能被类内部和子类访问,外部无法访问。
    • 适合需要对子类开放但不希望直接暴露给外部的成员。
  3. private(私有权限)
    • 成员只能被类内部访问,子类和外部均无法访问。
    • 适合存储不希望外部直接访问的敏感数据。

示例:

class MyClass {
public:
    int publicVar; // 公有成员

protected:
    int protectedVar; // 保护成员

private:
    int privateVar; // 私有成员

public:
    void setPrivateVar(int value) { // 通过公有函数访问私有成员
        privateVar = value;
    }
    int getPrivateVar() {
        return privateVar;
    }
};
C++

详细讲解与拓展

1. public 权限

  • 定义:在 public 下声明的成员可以在任何地方访问,包括类外部。
  • 用途:主要用来定义类的对外接口,例如公有方法或公开的属性。

示例

class Car {
public:
    string brand; // 公有属性
    void drive() { // 公有方法
        cout << "Driving a " << brand << endl;
    }
};

int main() {
    Car myCar;
    myCar.brand = "Toyota"; // 可以直接访问
    myCar.drive(); // 可以直接调用
    return 0;
}
C++

2. protected 权限

  • 定义:在 protected 下声明的成员只能在类内部和子类中访问。
  • 用途:通常用于基类向派生类开放的成员,但仍然对外部隐藏。

示例

class Base {
protected:
    int protectedVar;
};

class Derived : public Base {
public:
    void setProtectedVar(int value) {
        protectedVar = value; // 子类可以访问基类的保护成员
    }
};
C++
  • 外部无法访问
Derived d;
// d.protectedVar = 10; // 错误,外部无法访问保护成员
C++

3. private 权限

  • 定义:在 private 下声明的成员只能在类的内部访问,子类和外部均无法访问。
  • 用途:用于存储类的私有数据,通过公有方法提供访问接口。

示例

class Account {
private:
    double balance; // 私有属性

public:
    void deposit(double amount) { // 通过公有方法操作私有属性
        if (amount > 0) balance += amount;
    }
    double getBalance() {
        return balance;
    }
};
C++
  • 外部无法直接访问
Account myAccount;
// myAccount.balance = 100; // 错误,私有成员无法直接访问
myAccount.deposit(100); // 正确,通过公有方法访问
C++

访问权限的继承规则

当类被继承时,基类成员的访问权限会受到继承方式(publicprotectedprivate)的影响:

基类成员 public 继承 protected 继承 private 继承
public 成员 public protected private
protected 成员 protected protected private
private 成员 无法访问 无法访问 无法访问

示例

class Base {
public:
    int publicVar;
protected:
    int protectedVar;
private:
    int privateVar;
};

class Derived : public Base {
public:
    void test() {
        publicVar = 10;    // 可以访问
        protectedVar = 20; // 可以访问
        // privateVar = 30; // 错误,无法访问私有成员
    }
};
C++

应用建议

  1. private 用于保护类内部的数据不被外部直接访问,避免不安全操作。
  2. protected 用于子类需要访问但外部不需要知道的成员。
  3. public 用于定义类的外部接口,提供对外访问功能。

通过合理使用访问权限,可以增强代码的安全性、封装性和可维护性。


总结

C++中的类成员访问权限通过 publicprotectedprivate 控制类成员的访问范围:
public:任何地方都可以访问。
protected:只能在类内部和子类中访问。
private:仅能在类内部访问。

合理使用访问权限,可以提高代码的安全性和封装性,是设计高质量C++类的重要基础。

发表评论

后才能评论