打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++继承(一) 三种继承方式

https://www.cnblogs.com/lykkk/p/10699694.html

继承定义

继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。

继承就是不修改原有的类,直接利用原来的类的属性和方法并进行扩展。原来的类称为基类,继承的类称为派生类,他们的关系就像父子一样,所以又叫父类和子类。

一般格式如下:

class 派生类名 : 继承类型 基类名

派生类成员可以访问基类的public成员protected成员

三种继承方式

继承类型有三种,共有继承(public)私有继承(private)保护继承(protected)

++++++++++++++++++++ eric comment

可以这么来理解:

Private > Protect > Public

即:

私有继承 -- 力度最大, 会覆盖protect, public属性, 把他们都变成private;

保护继承 -- 力度次之, 只能覆盖public的属性, 其他保持不变;

公有继承 -- 力度最弱, 什么也不覆盖;

另外, 不管哪种方式继承, 基类的私有成员, 永远只属于基类自己, 不属于派生类, 只能由基类自己的成员函数去访问, 派生类不能访问基类的私有成员.

++++++++++++++++++++ eric comment

共有继承:

共有继承的特点是基类成员在派生类中都保持原来的状态

  • 基类中的public仍为public,

  • 基类中的protected仍为protected,

  • 基类中的private仍为private;

私有继承:

私有继承的特点是基类中所有成员在派生类中都变为私有成员

  • 基类中的public,protected变为private,

  • 基类中的private仍为private;

保护继承:

  • 基类中的public变为protected,

  • 基类中的protected仍为protected,

  • 基类中的private仍为private;

private在派生类中依然存在,但不论以哪种方法继承基类,派生类都不能直接访问基类的私有成员。

继承方式基类的public成员基类的protected成员基类的private成员
public继承public成员protected成员private成员
protected继承protected成员protected成员private成员
private继承private成员private成员private成员

for example:

class Base {    //基类     public :        int pub;    private:        int pri;    protected :        int pro;};class A : public Base{  //public继承     public :        int a;        void init() {            a = pub;    //可以,依然为public成员             a = pro;    //可以,依然为protected成员             a = pri;    //错误,基类的私有成员在派生类中是不可见的         }}; class B : protected Base{   //protected继承     public :        int b;        void init() {            b = pub;    //可以,变为protected成员             b = pro;    //可以,依然为protected成员             b = pri;    //错误,基类的私有成员在派生类中是不可见的         }}; class C : private Base{ //private继承     public :        int c;        void init() {            c = pub;    //可以,变为private成员             c = pro;    //可以,变为private成员             c = pri;    //错误,基类的私有成员在派生类中是不可见的         }}; int x;    A a;    x = a.pub;  //可以,public继承的public成员是public的,对对象可见     x = a.pro;  //错误,public继承的protected成员是protected的,对对象不可见     x = a.pri;  //错误,public继承的private成员是private的,对对象不可见        B b;    x = b.pub;  //错误,protected继承的public成员是protected的,对对象不可见    x = b.pro;  //错误,protected继承的protected成员是protected的,对对象不可见    x = b.pri;  //错误,protected继承的private成员是private的,对对象不可见        C c;    x = c.pub;  //错误,protected继承的public成员是private的,对对象不可见    x = c.pro;  //错误,protected继承的protected成员是private的,对对象不可见    x = c.pri;  //错误,protected继承的private成员是private的,对对象不可见    return 0;
  • public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用,因为每个子类对象也都是一个父类对象。

  • protetced/private继承是一个实现继承,基类的部分成员并非完全成为子类接口的一部分,是has-a的关系原则,所以非特殊情况下不会使用这两种继承关系,在绝大多数的场景下使用的都是公有继承。

  • class的默认继承是private的,struct的默认继承是public的。

搜索

复制

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++类多级派生时的访问属性
04选择题: 继承
04、C++ 类访问修饰符(补充笔记)
C++继承详解
继承与派生
java中的类成员访问修饰符
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服