继承再剖析

来源:互联网 发布:淘宝联盟导出excel后 编辑:程序博客网 时间:2024/06/08 23:31

  上节我们初步认识了C++中的继承特性,了解了关于继承的基础知识和基本概念,今天我们就来更深层次的探究吧。

我们知道,在类中,不仅有类的成员变量,更重要的是有类的对外接口——成员函数。在类的成员函数中,有六大成员函数至关重要,下面我们就来看在继承下基类和派生类的成员函数的情况。

(1)派生类的默认成员函数

在继承关系里面,若没有显示给出这六大成员函数,系统会合成默认的成员函数。


(2)基类和派生类的构造函数的关系

1.基类没有定义带参数(没有缺省值)的构造函数,派生类构造函数可有可无

2.基类有带参数的构造函数,派生类构造函数必须给出

3.基类有带默认值参数的构造函数,派生类会自动合成一个构造函数

(3)继承关系中构造函数的调用过程

派生类对象——调用派生类构造函数(初始化列表)——调用基类的构造函数——初始化自己的成员——执行派生类构造函数函数体


(4)继承关系中析构函数的调用过程

派生类对象——调用派生类析构函数处理自己特有的成员——执行函数体——调用基类的析构函数


(6)派生类对象模型


(7)继承体系中的作用域

1.派生类对象,优先访问派生类的成员变量,与成员变量的类型无关,若要访问基类的成员,需要加上域作用符,例如对象d调用基类B的成员变量_b,即d.B::_b;

2.派生类对象,优先调用派生类的成员函数,与成员函数的返回类型无关,若要访问基类的成员函数,需要加上域作用符。

注意:如果派生类成员函数与基类的成员函数同名,则会产生同名隐藏现象。同名隐藏需要具备三个条件,一是在继承体系中,二是和变量的类型无关,三是与函数参数列表无关,返回类型无关。

3.处于不同的作用域,所以不能构成重载函数。

(8)赋值兼容规则

1.子类对象可以赋值给父类对象 ,反之不可以。

2.父类对象的指针或者引用可以指向子类对象,反之不可以。

(9)友元关系与继承

1.友元关系不能继承,,也就是说基类友元不能访问子类私有和保护成员。

2.静态变量成员可以继承,但是只能共有一份。基类定义了static成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一个static成员实例。


原创粉丝点击