C++继承之public private protected

继承是C++代码复用的常用手段,发生在类之间,通过继承,子类可以拥有部分(甚至全部)父类的属性和行为。

C++类中经常会用到3个关键字:publicprivateprotected,用以限定访问级别以及继承方式。其中,用作访问级别限定时修饰的是类内成员,而用作继承方式时修饰的是类名

访问级别

  • 声明为public的成员,类外部、子类都可以访问
  • 声明为private的成员,类外部、子类都不可以访问
  • 声明为protected的成员,类外部不能访问、子类可以访问

通过对比可以发现private限制最严格,public限制最宽松,而protected介于二者之间。事实上protected是为继承而生的,能够有效防止继承后数据被外界访问,同时继承后的数据可以向类成员开放。

以下程序中,父类分别定义了三种访问级别的成员:m_publicm_privatem_protected,虽然子类中未定义成员变量,但子类继承了父类,因此子类中可以访问父类成员

#include<iostream>

using namespace std;

class Base
{
public://外部、子类都可以访问
    int m_public;
private://外部、子类都不能访问
    int m_private;
protected://外部不能访问、子类可以访问
    int m_protected;

public:

    Base() :m_public(100),m_private(200),m_protected(300)
    {
        cout << "基类构造" << endl;
    }
    void print()
    {
        cout<<"m_public: "<<m_public<<endl;
        cout<<"m_private: "<<m_private<<endl;
        cout<<"m_protected: "<<m_protected<<endl;
    }

};


class Derived : public Base
{
public:
    void print_base()
    {
        print();//父类的公有成员函数
        cout<<"----------------------"<<endl;
        cout<<"m_public: "<<m_public<<endl;
        //cout<<"m_private: "<<m_private<<endl; 子类不能访问父类private成员
        cout<<"m_protected: "<<m_protected<<endl;
    }
};

int main()
{
    Derived d;//子类对象
    d.print_base();//子类对象的公有成员函数

    d.m_public=400;//类外可以访问父类public成员
    cout<<d.m_public<<endl;

    return 0;
}

运行结果

基类构造
m_public: 100
m_private: 200
m_protected: 300
----------------------
m_public: 100
m_protected: 300
400

注:关于父类protected成员,在子类中可以正常访问,但不能通过子类对象访问,这样相当于在类外访问,如:

d.m_protected=1;//不能在类外访问protected修饰的父类成员,是被不允许的,报错!

继承方式

同样是上例,子类Derived的定义中有class Derived : public Base,意为public继承自Base

class Derived : public Base
{}

C++也支持private继承和protected继承,但一般只用public继承,原因是:

protectedprivate继承带来的复杂性远大于实用性

参考

狄泰软件学院 - C++深度解析教程 - 第44课、45课

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值