您的位置:首页 > 编程语言 > C语言/C++

C++继承与派生学习笔记

2016-12-03 23:53 375 查看

一、基本概念:

继承:子类不加修饰地延续父类的特征

派生:子类在延续父类的同时又添加了新的特征。在原有类的基础上建立新类并且添加新的特征叫做派生。

基类:有绝对基类和相对基类的区分,类似于树的根节点(绝对)与子树的根节点(相对)

派生类:子类又叫派生类

单一继承:只有一个基类的继承(一个父类派生多个子类)

多重继承:拥有多个基类的继承(多个父类派生一个子类)

派生类的声明

派生类共有: class 派生类名:public 父类名

派生类私有: class 派生类名:private 父类名

类可以访问从父类继承过来的公有成员,但是不能访问父类的私有成员

二、派生类的使用:

在创建派生类的构造函数时,有两种方法对数据进行初始化(首先得明确一种关系:访问基类的构造函数的唯一方法就是先访问子类(派生类)的构造函数。而调用子类的构造函数就必定会先调用基类构造函数。区别调用和访问(便于理解)):

1、在派生类中创建一个构造函数,然后初始化所有数据(从基类那里继承来的数据和子类数据)。因为基类中已经有构造函数,重复构造这种方法显得有点繁复冗余。何况在派生类对基类进行初始化的方法也不可取。

2、在派生类中创建一个构造函数,用该构造函数调用基类的构造函数并且向构造函数传递初始值参数,这种方法比第一种效率要高些,并且出错的几率会小些。

普通类中成员的调用(不涉及基类与子类)

类中public成员可以由类的对象直接调用,也可以通过类的publi接口函数调用,但是可以由对象直接调用就没有必要借用接口函数。

类中private成员不可以由类对象直接调用,但是可以由类中public接口函数间接调用。

继承与派生中基类成员的调用(涉及基类与子类)

基类protected成员,在公有派生中和私有派生中,都不可以由子类对象直接调用,但是可以由子类中public接口函数间接调用。

基类中private成员,在公有派生中和私有派生中,子类对象不能通过子类public接口函数间接调用,自然也不能由子类对象直接调用。

基类public成员,在公有派生中,可以由子类的对象直接调用,也可以通过子类的publi接口函数调用,但是可以由对象直接调用就没有必要 借用接口函数。在私有派生中,子类对象只能通过子类的public接口函数调用。

三、总结:

1、无论是在私中还是公有派生中,子类都可以直接访问基类的public和protected成员,但是子类的对象只能直接访问基类的public成员

2、子类的对象能通过子类中的public接口函数访问基类protected成员(实质还是子类对象访问子类中public成员(接口函数),而子类访问 基类protected成员)

3、private成员子类以及子类对象都不可以访问。private成员只能由该类本身访问。

第二种传递参数的方法使用时注意:

(1)、如果没有定义派生类的构造函数,将默认执行基类的构造函数(实质是访问了派生类的默认构造函数,通过派生类的默认构造函数调用了基 类的构造函数)。

(2)、如果需要向基类传递参数,那么必须在基类定义带参数的构造函数,以为向基类传递参数,必须先访问子类构造函数,由子类构造函数将参 数传给基类,如果基类构造函数不带参数(即不定义带参数的子类构造函数,执行默认的子类构造函数),那么基类的参数自然也无法传递到 基类。

(3)、如果只需要调用基类的构造函数,不需要向基类和派生类传递参数,那么派生类的构造函数自然不用定义(直接使用默认的子类构造函数),但是为了使程序输出时整个调用先后顺序更明白,一般也会定义一个不带参数但是有输出提示信息的构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class 继承