【c++】c++三大特性之——继承

了解到c++的面向对象的编程思想以及它的三大特性封装、继承、多态后,本文主要讲述他的继承这一特性。

目录

1、了解继承

2、继承的本质

3、继承的内容

4、继承的写法

5、继承与派生的关系

6、派生类(子类)的内存布局

7、派生类对象的构造析构

8、基类中不同访问限定符下的成员以不同继承方式继承后再派生类中的访问限定

9、类与类的关系

10、基类或派生类指针或引用的相互指向或引用


1、了解继承

首先看一下的代码,A是被继承的类,B是继承的类;在c++中A被称为父类,B被称为子类。

class A//父类
{

public:

    A(int a = 0):ma(a)

    {
        cout << "A(){}"<<endl;
    }

    void show(){}
    void show(int rhs){}//重载
    ~A()
    {
        cout << "~A(){}"<<endl;
    }
private:
    int ma;
};
class B:public A//子类
{
public:
   B(int b = 0):mb(b)
    {
       cout << "B(){}"<<endl;
    }
    void show(){}//隐藏
    ~B()
    {
        cout << "~B(){}"<<endl;
    }
private:
    int mb;
};

int main()
{
    B b;
    return 0;
}

也就是说B类继承了A类,它拥有A类的成员。

2、继承的本质

透过现象看本质,从上述的代码中可以看到,在B类中,他继承了A类,在它的作用域下就会存在A类的成员。本质上可以说是代码的复用。不需要在B类中重复实现和A类相同的成员,继承就可以完成这样的事情。

3、继承的内容

         ①继承了作用域;

         ②继承除构造函数以外的所有成员;

4、继承的写法

         类标识符class  类名 :继承方式(可省,默认为私有的)  基类名称

5、继承与派生的关系

         根据上述代码来描述继承和派生的关系如图:

继承是子类对父类的动作;派生是父类对子类的动作;

6、派生类(子类)的内存布局

B类作为A派生出来的类,它的内存布局如图所示:

7、派生类对象的构造析构

         构造:系统调用基类的构造

                     系统调用派生类的构造

         析构:系统调用派生类的析构

                     系统调用基类的析构

运行上述的代码,结果如下:

        

8、基类中不同访问限定符下的成员以不同继承方式继承后再派生类中的访问限定

访问限定符:

         Public:任意位置访问

         Protected:本类与子类类中访问

         Private:本类类中访问;

继承方式/访问限定符

 

Public

Protected

Private

Public

Public

Protected

不可访问

Protected

Protected

Protected

不可访问

Private

Private

Private

不可访问

公有继承是是一个的关系,对基类的公有成员和保护成员的访问属性不变,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员;

私有继承是有一个的关系,基类的公有成员和保护成员都被派生类继承下来之后变成私有成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。

保护继承中,基类的公有成员和保护成员被派生类继承后变成保护成员,派生类的新增成员可以访问基类的公有成员和保护成员,但是访问不了基类的私有成员。

9、类与类的关系

    组合:  has_a   a  part  of

    继承:   is_a    a  kind  of

    代理:   容器适配器的实现就是一种代理的关系

10、基类或派生类指针或引用的相互指向或引用

注意:

允许基类的指针或引用指向或引用派生类对象;

不允许派生类的指针或引用指向或引用基类对象;

解释基类指向或引用派生类:

解释派生类指向或引用基类:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值