C++中protected访问权限问题

今天发现有这样两句话:
1. 基类的保护成员对于派生类的成员是可访问的。
2. 派生类的成员只能通过派生类对象访问基类的保护成员,派生类对一个基类对象中的受保护成员没有访问权限。

这两句话看的太头晕了,其实作者应该是想表达:只有在派生类中才可以通过派生类对象访问基类的protected成员。看这样的代码:

class Base
{
public:
    Base();
private:
    void foo();
protected:
    int m;
};
class Derive : public Base
{
public:
    Derive();
};
Derive::Derive()
{
    this->m = 1;  // 这里访问m没有问题
}

使用类的代码:

Derive *d = new Derive();
std::cout<< d->m <<endl;  // 这里就报错了

总结一下三个关键字的访问范围:
public: 能被类成员函数、子类函数、友元访问,也能被类的对象访问。
private: 只能被类成员函数及友元访问,不能被其他任何访问,本身的类对象也不行。
protected: 只能被类成员函数、子类函数及友元访问,不能被其他任何访问,本身的类对象也不行。

还是上面的两个类,只看public和private,如下代码:

    Base *b = new Base();
    b->test_pub();  // 通过
    b->foo();   // 报错
    std::cout<< b->m;   // 报错

protected继承和private继承能降低访问权限:

使用private继承,父类的protected和public属性在子类中变为private
使用protected继承,父类的protected和public属性在子类中变为protected
使用public继承,父类中的protected和public属性不发生改变

  • 40
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值