继承与派生文档格式.docx

上传人:b****5 文档编号:21630475 上传时间:2023-01-31 格式:DOCX 页数:30 大小:27.33KB
下载 相关 举报
继承与派生文档格式.docx_第1页
第1页 / 共30页
继承与派生文档格式.docx_第2页
第2页 / 共30页
继承与派生文档格式.docx_第3页
第3页 / 共30页
继承与派生文档格式.docx_第4页
第4页 / 共30页
继承与派生文档格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

继承与派生文档格式.docx

《继承与派生文档格式.docx》由会员分享,可在线阅读,更多相关《继承与派生文档格式.docx(30页珍藏版)》请在冰豆网上搜索。

继承与派生文档格式.docx

name<

”sex:

sex<

}//以上3行是操作代码

};

如果某个部门除了需要用到学号、姓名、性别以外,还需要用到年龄、地址等信息,当然可以重新声明另一个类:

intnum;

//这是数据成员

intage;

charaddr[20];

”age:

age<

”address:

address<

}

可以看到有相当一部分是原来已有的。

能否利用原有的类作为基础,再加上新的内容即可,以减少重复的工作量。

C++提供的“继承”机制就是为了解决这个问题。

 

一、派生类

派生类(也称子类)是C++提供继承的基础,也是对原来的类进行扩充和利用的一种基本手段。

C++派生类继承或修改原有类中的部分或全部方法,而且可以增加原来类中没有的新方法,以满足使用派生类的需要。

一个类可以继承另一个类的属性。

其中被继承的类叫做基类(Baseclass),继承后产生的类叫做派生类(Derivedclass)。

有时,也把基类称为“父类”,而把派生类称为“子类”。

可以把派生类看作基类的扩展,它提供了一种简单、灵活且有效的机制对基类进行利用和扩展。

派生类从基类中继承所有的公共部分,并可以增加数据成员和成员函数。

任何类都可以作为基类,一个基类可以有一个或多个派生类,一个派生类还可以成为另一个类的基类。

定义派生类的一般格式如下:

class派生类名:

[访问属性]基类名

{

...

};

其中:

(1)class是类定义的关键字,用于告诉编译器下面定义的是一个类。

(2)派生类名是新定义的类名。

(3)访问属性(也叫继承方式、访问权限、引用权限)是访问说明符,可以是private、public和protected之一。

默认值为private,派生类名和访问属性之间用冒号隔开。

派生类的访问控制由访问属性来确定,它按下述方式来继承基类的访问属性:

.如果访问属性为public,则基类的public成员是派生类的public成员;

基类的private成员是派生类的private成员;

基类的private成员对基类仍保持private属性。

.如果访问属性为protected,则基类的public和private成员均是派生类的protected成员;

基类的private成员对派生类仍保持private属性。

具体来说,基类中声明为protected的数据只能被基类的成员函数或其派生类的成员函数访问;

不能被派生类以外的成员函数访问。

.如果访问属性为private,则基类的public和protected成员都是派生类的private成员;

也就是说,当访问属性为private时,派生类的对象不能访问基类中以任何方式定义的成员函数。

(4)基类名可以有一个,也可以有多个。

如果只有一个基类,则这种继承方式叫做简单继承;

如果基类名有多个,则这种继承方式称为多重继承。

各个基类名之间用逗号隔开。

例:

在前面声明的基类stud的基础上声明一个派生类student:

classstudent:

publicstud//声明基类是stud

{private:

intage;

//新增加的数据成员

charaddr[30];

voiddisplay_1()//新增加的成员函数

{cout<

"

age:

address:

addr<

}

看第一行:

student是新建的类名;

stud是已存在的基类;

public用来表示基类stud中的成员在派生类student中的使用权限。

1、公用派生类

在声明一个派生类时将基类的引用权限指定为public的,该类称为基类的

公用派生类。

在公用派生类中,基类的公用成员和保护成员仍然成为派生类中公用成员

和保护成员,而基类的私有成员不能被派生类引用,即成为派生类“不可访问的成员”,只有基类的成员函数可以引用它。

classstud//声明基类是stud

//基类私有数据成员

voiddisplay()//基类公用成员函数

publicstud//声明一个公用派生类student,基类是stud

voidshow()//新增加的成员函数

//企图引用基类的私有成员,错误。

//引用派生类的私有成员,正确。

可以通过基类的公用成员函数来引用基类的私有成员,下面对派生类student的声明修改为:

例1

#include<

string.h>

iostream.h>

classstud//声明基类是stud

{private:

//基类保护数据成员

stud(intn,charnam[],chars)//定义基类构造函数

{num=n;

//给数据赋初值

strcpy(name,nam);

sex=s;

voiddisplay()

num="

name:

"

sex:

};

classstudent:

//派生类的私有数据

student(intn,charnam[],chars,inta,charad[]):

stud(n,nam,s)//派生类的构造函数

{age=a;

//在此处只对派生类新增加的变量初始化

strcpy(addr,ad);

voidshow()//新增加的成员函数

{display();

//引用基类的公用成员函数,允许

//cout<

num:

//引用基类的私有成员,错误

//引用派生类的私有成员,正确

voidmain()

{studaa(20001,"

Zhou"

'

F'

);

//定义基类的对象

studenta(10010,"

Wang_li"

f'

19,"

115BeijingRoad,Shanghai"

//定义派生类的对象

studentb(10011,"

Zhang_fun"

m'

21,"

231ShanghiRoad,Beijing"

//定义派生类的对象

a.show();

b.show();

//分别输出第一、第二两个学生的数据

a.display();

//从基类继承的公用成员函数

aa.display();

//a.age=18;

//外界不能引用派生类的私有成员,错误

//a.num=10020;

//外界不能引用基类的私有成员,错误

}

运行结果为:

num=10010

Wang_li

f

19

115BeijingRoad,Shanghai

num=10011

Zhang_fun

m

21

231ShanghiRoad,Beijing

num=20001

Zhou

F

2、私有派生类

在声明一个派生类时,将基类的引用权限指定为private的,该类称为基类的

私有派生类。

在私有派生类中,基类的公用成员和保护成员成为派生类中私有成员,基类

的私有成员成为派生类“不可访问的成员”,只有基类的成员函数可以引用它。

如果派生类声明首行改为

privatestud//声明一个私有派生类student,基类是stud

{display();

//基类的公用成员函数变成派生类的私有函数

voidmain()

{studenta;

//定义一个派生类的对象

//错误。

基类的公用成员函数变成派生类的私有函数

a.age=18;

外界不能引用派生类的私有成员

可以看到:

(1)不能通过私有派生类对象引用从基类继承过来的任何成员。

(2)在派生类的成员函数中不能访问基类的私有成员,可以访问基类的公用成员。

例2

{age=a;

//基类的公用成员函数变成派生类的私有函数,允许

//分别输出第一、第二个学生的数据

//a.display();

//基类的公用成员函数变成派生类的私有函数,企图引用,错误

3、保护成员

保护成员和private、public一样是用来声明成员的引用权限的。

由protected

声明的成员称为保护成员。

保护成员不能被外界引用(这点和私有成员类似),但它可以被派生类的成员函数引用。

从前面的介绍已知基类的私有成员被派生类(不论是私有派生类还是公用派生类)继承后变为“不可访问的成员”。

如果想在派生类引用基类的成员,可以将基类的成员声明为protected。

例3

{protected:

{num=n;

charaddr[30];

//引用基类的保护成员,合法

//从基类继承的公用成员函数,允许

//外界不能引用基类的保护成员,错误

10010

Wang_li

f

10011

Zhang_fun

m

将本例与例1-28对比分析,可以看到基类的保护成员对类的外界来说仍然是不可引用的(由于stud中的num是保护成员,外界不能用a.num来引用它),但对来说它相当于私有成员,可以通过成员函数引用。

也就是把保护成员的引用范围扩展到派生类中。

4、派生类的构造函数

派生类从基类继承了非私有成员函数和数据成员,但是在建立派生类的对象时,系统只执行派生类的构造函数,而不会自动执行基类的构造函数。

也就是说,基类的构造函数是不能继承的。

如果基类的构造函数包含对变量的初始化,那么在建立派生类的对象时,由于没有执行基类的构造函数,因而就会使基类的变量未初始化。

所以在设计派生类的构造函数时,不仅要考虑派生类所增加的变量初始化,还应当考虑基类的变量初始化。

在执行派生类的构造函数时,应当调用基类的构造函数。

例4:

派生类的构造函数

classstud//声明基类是stud

{protected:

~stud(){}//基类析构函数

{private:

//引用基类的保护成员,合法。

~student(){}//派生类析构函数

{

studentb(10011,"

//输出第一个学生的数据

//输出第二个学生的数据

num

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1