美文网首页
继承和派生

继承和派生

作者: 医学农民工 | 来源:发表于2019-08-21 19:25 被阅读0次

我们知道C++里面有很多机制是为了提高软件的重用性来设计的, 什么叫重用性好呢?就是你有一部分代码实现了一个功能, 后面你要新写一个代码,从那里要实现一个功能的时候,你不必重头写,你把原来的代码直接拿来用就可以了,这就叫做可重用性好。

1.派生

继承和派生这两程序是一回事,我们可以把类A做成一个基类,把类B作为基类A的一个派生类(也称为子类)来写。 A和B重的部分,我们就不需要重头去写了。

派生类的写法:class派生类名:public 基类名 {};

class派生类名:public 基类名 
{
};

派生类对象的内存空间(对象的体积)等于基类对象的体积加上派生类对象自己的成员变量的体积,而且,派生类对象中所包含的基类对象,它的存储位置是位于派生类对象的新增成员对象的前面

派生类,它拥有基类的全部特点(它拥有基类的全部成员函数和成员变量)。 此外还可以对基类进行修改扩充
扩充比较简单一点,就是我们可以为这个派生类添加新的成员变量 和成员函数。
所谓修改,指的就是在派生类里面,我们可以写和基类名称相同的成员函数,但这成员函数的行为跟基类不太一样,这可以称作一种修改(覆盖)。

派生类一经定义以后,就可以独立使用。可以用它定义对象,定义对象的时候不需要再扯进基类。尽管派生类继承了基类private的成员,但是在派生类的成员函数中,依然不能够访问这些继承自基类的private成员。

在声明派生类时,只需要列出它的直接基类
●派生类沿着类的层次自动向上继承它的间接基类
●派生类的成员包括:
⑴派生类自己定义的成员
⑵直接基类中的所有成员
⑶所有间接基类的全部成员

2.复合关系和继承关系

类和类之间主要有三种关系:没关系继承关系复合关系
继承关系:“是”关系
-基类A,B是基类A的派生类
-逻辑上要求:一个B对象也是一个A对象(就好比我们从学生类派生出中学生类)

复合关系:“有 ”关系
-类C中“有”成员变量K,K是类D的对象,则C和D是复合关系
-一般逻辑上要求:D对象是C对象的固有属性和组成部分(
几何形体程序中,需要写“点”类,也需要写“圆”类,两者的关系就是复合关系——每一个“圆”对象里都包含有一个“点”对象,这个“点”对象就是圆心。)

3.基类/派生类同名成员和protected访问范围说明符

基类和派生类有时候会出现同名成员的情况,也就是拥有相同名称的成员变量或者成员函数。
如果我们有一个基类class base, 在这个基类里面定义了一个成员变量int j,此外还有int i和void func()。 由这个基类派生出来的一个新的类class derived,class derived里头也包含了一个int i 还有一个函数void access()和void func()。
一般来说,基类和派生类不定义同名成员变量。
例:

class base{    //基类
        int j;        //私有成员
    public:
        int i;
        viod func();
}

class derived : public base {    //派生类
    public:
        int i;
        viod access();
        viod func();
}

void derived::access()
{
j=5;   // error ,j是基类私有成员,派生类无法访问
i=5;  //引用的是派生类 i
base::i=5;   //加入::定位符 ,引用的是基类 i
func();  //引用的是派生类 
base::func();  //引用的是基类
}

derived obj;
obj.i=1;
obj.base::i=1;

访问范围说明符
1、 基类的private成员:可以被下列函数访问
●基类的成员函数
●基类的友员函数
2、 基类的public成员:可以被下列函数访问
●基类的成员函数
●基类的友员函数
●派生类的成员函数
●派生类的友员函数
●其他的函数
3、 基类的protected成员:可以被下列函数访问
●基类的成员函数
●基类的友员函数
●派生类的成员函数可以访问当前对象的基类的保护成员

4.派生类的构造函数

派生类和其他所有的类一样都包含一个构造函数,当派生类去调用构造函数的时候,首先就需要去执行基类的构造函数,去初始化那些派生类中间包含的基类对象的一些初始化。
具体形式:构造函数名(形参表):基类名(基类构造函数实参表)
调用基类构造函数的两种方式
•显式方式:
派生类的构造函数中→基类的构造函数提供参数


derived::derived(arg_derived-list):base(arg_base-list)
//在派生类derived类里,去定义相应的形参参数,具体的实参写在基类base的构造函数实参列表里

•隐式方式:
派生类的构造函数中,省略基类构造函数时,派生类的构造函数自动调用基类的默认构造函数。

派生类的析构函数被执行时,执行完派生类的析构函数后,自动调用基类的析构函数。

•创建派生类对象时,执行派生类的构造函数之前:
①调用基类的构造函数
→初始化派生类对象中从基类继承的成员
②调用成员对象类的构造函数
→初始化派生类对象中成员对象
•执行完派生类的析构函数后:
①调用成员对象类的析构函数
②调用基类的析构函数

5.public继承的赋值兼容规则

⑴派生类的对象可以赋值给基类对象(一个基类对象并不是一个派生类对象)
⑵派生类对象可以初始化基类的引用
⑶派生类对象的地址可以赋值给基类的指针


仅作为笔记

相关文章

  • 继承和派生

    我们知道C++里面有很多机制是为了提高软件的重用性来设计的, 什么叫重用性好呢?就是你有一部分代码实现了一个功能,...

  • 实现继承

    1. 继承 1.1 继承和派生的关系 基类和派生类的关系就是,派生类从基类派生而来。 1.2 派生语法 1.3 访...

  • 2017.9.18

    继承和派生 派生的格式: class 派生类名:继承方式 基类名 {派生类中的新成员} 例: class Mast...

  • OC学习总结2 派生、重写和多态

    继承和派生继承是指一个新类拥有全部被继承类的属性和方法,通过继承产生新类的过程也称作派生。派生: 由子类创建的方法...

  • C++ 一篇搞懂继承的常见特性

    继承和派生 01 继承和派生的概念 继承: 在定义一个新的类 B 时,如果该类与某个已有的类 A 相似(指的是 B...

  • C++派生类

    派生类的概念和定义 ① 定义格式 派生类定义的语法为: class 派生类名:继承方式1 基类名1, 继承方式2 ...

  • CPP:04类的继承和派生

    CPP04:类的继承和派生

  • 2017 09 18

    相关知识点的学习与运用: 一.继承和派生: 1.继承: 1-1基本结构: class派生类名:继承方式 基类名 {...

  • C++继承和派生

    C++通过继承关系,实现了代码的可重用性。 public表示继承方式,也表示访问权限 一、继承方式和访问权限的影响...

  • 03 继承和派生 组合

    一 继承介绍 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生...

网友评论

      本文标题:继承和派生

      本文链接:https://www.haomeiwen.com/subject/iqhjsctx.html