类的继承——继承中的访问级别

本文参照于狄泰软件学院,唐佐林老师的——《C++深度剖析教程》

问题:子类是否可以直接访问父类的私有成员?
1. 根据面向对象理论:子类拥有父类的一切属性和行为,所以子类能够直接访问父类的私有成员的!
2. 根据C++的语法:外界不能直接访问private成员,所以子类不能直接访问父类的私有成员。

到底哪个结论才是正确的呢?我们可以写代码来验证一下想法。测试发现:子类不能直接访问父类的私有成员!
既然子类不能直接访问父类的私有成员,那么除了通过成员函数外,有没有别的方法可以访问到父类的私有成员呢?

新的访问级别:protected

为了解决子类访问父类私有成员的问题:C++中为我们提供了一种新的访问级别——protected。
1. 修饰的成员不能被外界直接访问
2. 修饰的成员可以被子类直接访问

示例代码:protected初体验

#include <iostream>
#include <string>

using namespace std;

class Parent
{
protected:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }

    int value()
    {
        return mv;
    }
};

class Child : public Parent
{
public:
    int addValue(int v)
    {
        mv = mv + v;   
    }
};

int main()
{   
    Parent p;

    cout << "p.mv = " << p.value() << endl;

    // p.mv = 1000;    // error

    Child c;

    cout << "c.mv = " << c.value() << endl;

    c.addValue(50);

    cout << "c.mv = " << c.value() << endl;

    // c.mv = 10000;  // error

    return 0;
}

问题:为什么面向对象中需要protected?

面向对象源于生活,那么我们也可以在生活中找到例子。
private:属于自己的秘密
public:一些公开的信息,姓名,学历等
那么,我们有一些秘密是可以分享给亲近的人,这种秘密就是protected了。
实际上:protected关键字就是为了继承而专门设计的,没有protected就无法完成真正的代码复用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值