公有成员、保护成员、私有成员知识

在C++中,类的成员可以根据其访问权限被分为三种类型:公有成员(public)、保护成员(protected)和私有成员(private)。这些访问权限控制符决定了类成员在类的内部和外部的可访问性。

公有成员(public)

公有成员在类的内部和外部都是可访问的。这意味着公有成员可以被类的对象、类的成员函数以及类的友元函数访问。

class MyClass {
public:
    int publicVar; // 公有成员变量
    void publicFunc() { // 公有成员函数
        // 可以访问公有成员、保护成员和私有成员
    }
};

保护成员(protected)

保护成员在类的内部和继承自该类的派生类中是可访问的,但在类的外部是不可访问的。这意味着保护成员可以被类的成员函数、派生类的成员函数以及类的友元函数访问,但不能被类的对象访问。

class MyClass {
protected:
    int protectedVar; // 保护成员变量
    void protectedFunc() { // 保护成员函数
        // 可以访问公有成员、保护成员和私有成员
    }
};
class DerivedClass : public MyClass {
public:
    void accessProtected() {
        protectedVar = 10; // 派生类中可以访问基类的保护成员
    }
};

私有成员(private)

私有成员仅在类的内部是可访问的。这意味着私有成员只能被类的成员函数和类的友元函数访问,不能被类的对象或派生类的成员函数访问。

class MyClass {
private:
    int privateVar; // 私有成员变量
    void privateFunc() { // 私有成员函数
        // 可以访问公有成员、保护成员和私有成员
    }
};
class DerivedClass : public MyClass {
public:
    void tryAccessPrivate() {
        // privateVar = 10; // 错误,派生类中不能访问基类的私有成员
    }
};

访问权限对继承的影响

当类被继承时,访问权限会影响派生类对基类成员的访问能力:

  • 公有继承(public):基类的公有成员在派生类中保持公有,基类的保护成员在派生类中保持保护,基类的私有成员不可访问。
  • 保护继承(protected):基类的公有成员和保护成员在派生类中都变为保护,基类的私有成员不可访问。
  • 私有继承(private):基类的公有成员和保护成员在派生类中都变为私有,基类的私有成员不可访问。

示例

class Base {
public:
    int publicVar;
protected:
    int protectedVar;
private:
    int privateVar;
};
class Derived : public Base {
public:
    void accessBaseMembers() {
        publicVar = 10; // 正确,公有成员可访问
        protectedVar = 20; // 正确,保护成员在派生类中可访问
        // privateVar = 30; // 错误,私有成员不可访问
    }
};
int main() {
    Derived d;
    d.publicVar = 10; // 正确,公有成员可访问
    // d.protectedVar = 20; // 错误,保护成员不可在类外访问
    // d.privateVar = 30; // 错误,私有成员不可访问
    return 0;
}

在这个示例中,Derived类公有继承自Base类。因此,Derived类的对象可以访问Base类的公有成员,但不能访问其保护成员和私有成员。在Derived类的成员函数中,可以访问基类的公有成员和保护成员,但不能访问私有成员。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值