c/c++语言开发共享第五章 继承与派生

[TOC] 基本概念 1. 继承和派生是一个概念 2. 当新类(派生类)与已有类(基类)具有相似的特性(包含已有类所有特性),则可以通过继承获得已有类的全部对象。 3. 继承是对原有对象的复用,同时在此基础上进行修改(覆盖)与扩充。 4. 派生类会继承基类的所有成员(private、protecte …

目录

基本概念

  1. 继承和派生是一个概念
  2. 当新类(派生类)与已有类(基类)具有相似的特性(包含已有类所有特性),则可以通过继承获得已有类的全部对象。
  3. 继承是对原有对象的复用,同时在此基础上进行修改(覆盖)与扩充。
  4. 派生类会继承基类的所有成员(private、protected、public),但派生类成员函数无法访问基类的private成员
  5. 继承方式:class 派生类名:访问属性 基类名{}
  6. 存储空间:派生类中新声明的成员,其存储空间位于继承的基类成员存储空间之后
  7. 派生类成员覆盖基类成员后,成员函数可通过基类名::基类成员名调用被覆盖的基类成员(一般不会覆盖基类成员变量,而是覆盖成员函数)

继承关系&复合关系

  1. 继承逻辑(“是”):派生类是一种基类(如狗是动物)

  2. 复合逻辑(“有”):如果类a是类b的成员对象,则类b包含类a,类a是类b的一种固有属性或组成部分

    class point{     double x,y; } class circle{ //不用继承,而采用复合关系     point center;     double r; } 

    复合关系的另一种情况:

    class master; class dog{     master *m; } class master{     dog *dog[10]; } 

protected保护成员

  1. 可通过基类成员函数、基类友元函数访问,派生类成员函数可访问当前对象的基类protected保护成员

派生类的构造函数

  1. 创建派生类对象时,先调用基类构造函数对从基类中继承的变量初始化,然后才是调用派生类构造函数;
  2. 先构造的后析构
  3. 调用基类构造函数的两种方式:
    • 显式调用:直接在派生类构造函数的初始化列表中调用;
    • 隐式调用:使用基类空构造函数进行初始化(若没有该函数,则报错)

public继承的赋值兼容性规则

  1. 派生类对象可以赋值给基类对象、初始化基类引用;派生类对象地址可以赋值给基类指针

  2. 若继承方式改成protected或private,上述规则1不成立

    class base{} class derived:public base{} base b; derived d; b=d; base &br=b; base *bp=&b; //bp不能访问属于derived类的部分 derived *dp=(derived*)bp; //强制类型转换,需要保证bp指向derived类 
  3. 直接基类:派生类直接继承的基类
    间接基类:直接基类继承的所有基类

  4. 声明派生类时,只需声明其直接基类;派生类会自动向上继承其间接基类

  5. 构造顺序:间接基类→直接基类→派生类(析构反之)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/599876.html

(0)
上一篇 2021年5月9日
下一篇 2021年5月9日

精彩推荐