第11章继承和派生

合集下载

第11章 继承与派生讲义.

第11章 继承与派生讲义.

2018年11月10日星期 六12时46分5秒
湖北大学数计学院计科系 朱明
C++面向对象程序设计------第11章 继承与派生
18/115
2018年11月10日星期 六12时46分5秒
湖北大学数计学院计科系 朱明
C++面向对象程序设计------第11章 继承与派生
19/115
11.4.1 公有继承 Class Student//声明基类 {public: //基类公用成员 void get_value( ){cin>>num>>name>>sex;} void display( ) {cout<<″ num: ″<<num<<endl; cout<<″ name: ″<<name<<endl; cout<<″ sex: ″<<sex<<endl;} private : //基类私有成员 int num; string name; char sex; };



从基类接收成员 派生类把基类全部的成员(不包括构造函数和析构函 数)接收过来,也就是说是没有选择的,不能选择接 收其中一部分成员,而舍弃另一部分成员。需要慎 重选择基类,使冗余量最小。 调整从基类接收的成员 接收基类成员是程序人员不能选择的,但是程序人 员可以对这些成员作某些调整,如同名覆盖或重载。 在声明派生类时增加的成员 这部分内容是很重要的,它体现了派生类对基类功 能的扩展。要根据需要仔细考虑应当增加哪些成员, 精心设计。
湖北大学数计学院计科系 朱明
2018年11月10日星期 六12时46分4秒

(C++ 面向对象程序设计 谭浩强)第11章 继承与派生

(C++ 面向对象程序设计 谭浩强)第11章 继承与派生

第4篇面向对象的程序设计第11章继承与派生第12章多态性与虚函数第13章输入输出流第14章C++工具第11章继承与派生11.1继承与派生的概念11.2派生类的声明方式11.3派生类的构成11.4派生类成员的访问属性11.5派生类的构造函数和析构函数11.6多重继承11.7基类与派生类的转换11.8继承与组合11.9继承在软件开发中的重要意义面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。

要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特征——继承性和多态性。

在本章中主要介绍有关继承的知识,在第12章中将介绍多态性。

面向对象技术强调软件的可重用性(software reusability)。

C++语言提供了类的继承机制,解决了软件重用问题。

11.1继承与派生的概念在C++中可重用性是通过继承(inheritance)这一机制来实现的。

继承是C++的一个重要组成部分。

一个类中包含了若干数据成员和成员函数。

在不同的类中,数据成员和成员函数是不相同的。

但有时两个类的内容基本相同或有一部分相同。

利用原来声明的类Student作为基础,再加上新的内容即可,以减少重复的工作量。

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

在第8章已举了马的例子来说明继承的概念。

见图11.1示意。

在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。

已存在的类(例如“马”)称为“基类(base class )”或“父类(father class )”。

新建的类(例如“公马”)称为“派生类(derived class )”或“子类(son class )”。

见图11.2示意。

图11.1图11.2一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。

通过继承,一个新建子类从已有的父类那里获得父类的特性。

从另一角度说,从已有的类(父类)产生一个新的子类,称为类的派生。

类的继承是用已有的类来建立专用类的编程技术。

第章继承和派生ppt课件

第章继承和派生ppt课件

#include "iostream.h"
class D: private B
{ int z;
public :
void Setz(int c) {z=c;}
void Setbase(int a, int b)
{x=a;
//对于派生类,仍是公有
y=b;
}
int Getbx() {return Getx();}
public
{ private : < 私有成员> ; public :
< 公有成员> ; protected : < 被保护成员> ;
}
, public
例: 11-4
class A
{protected :
//保护成员
int w;
public :
void Setw(int a) {w=a;}
int Getw(){return w;}
//私有派生时,
基类中的公有成员不能直接访问
d.Setz(3);
cout<<"x="<<d.Getbx()<<endl;
cout<<"y="<<d.Getby()<<endl;
cout<<"z="<<d.Getz()<<endl;
cout<<"sum="<<d.Sum()<<endl;
};
11.1.4 保护成员 对于派生类,它是公有的;对于外部程序,它是私
#include "iostream.h" void main()

第11章 c++继承与派生

第11章  c++继承与派生

在C++中,所谓“继承”就是在一个已存在的类的 基础上建立一个新的类。已存在的类(例如“马”) 称为“基类(base class)”或“父类(father class)”。 新建立的类(例如“公马”)称为“派生类(derived class)”或“子类(son class)”。见图11.2示意。
图11.1
由于基类的私有成员对派生类来说是不可访问的, 因此在派生类中的display_1函数中直接引用基类的 私有数据成员num,name和sex是不允许的。只能 通过基类的公用成员函数来引用基类的私有数据成 员。
可以将派生类Student1的声明改为
class Student1: public Student//以public方式声明派生类Student1 {public: void display_1( ) {cout<<″ age: ″<<age<<endl; //引用派生类的私有成员,正确 cout<<″ address: ″<<addr<<endl; //引用派生类的私有成员,正确 } private: int age; string addr; };
然后在main函数中分别调用基类的display函数和 派生类中的display_1函数,先后输出5个数据。 可以这样写main函数(假设对象stud中已有数据):
int main( ) {Student1 stud;//定义派生类Student1的对象stud
┆ stud.display( ); stud.display_1(); 的值 return 0; }
具体说,在讨论访问属性时,要考虑以下几种情况: (1) 基类的成员函数访问基类成员。 (2) 派生类的成员函数访问派生类自己增加的成员。 (3) 基类的成员函数访问派生类的成员。 (4) 派生类的成员函数访问基类的成员。 (5) 在派生类外访问派生类的成员。 (6) 在派生类外访问基类的成员。 对于第(1)和第(2)种情况,比较简单,按第8章介绍 过的规则处理,即: 基类的成员函数可以访问基类 成员,派生类的成员函数可以访问派生类成员。私 有数据成员只能被同一类中的成员函数访问,公用 成员可以被外界访问。

第11章 继承和派生

第11章 继承和派生

NewClass2
NewClass3
NewClass4
NewClass5
NewClass6
NewClass7
经验:继承层次一般不要超过3层
4 淮海工学院计算机工程学院 杨世通 2014-2015-1学期 2015年8月31日10时13分
C++程序设计 G计算机141
11.1 继承与派生的概念
继承的分类: 多父类继承:一个子类可以有几个父类
21
淮海工学院计算机工程学院 杨世通 2014-2015-1学期
2015年8月31日10时13分
C++程序设计 G计算机141


1、发现并封装变化 2、面向接口编程,而不是面向实现编程 3、优先使用组合,而不是优秀使用继承 (类爆炸)
22
淮海工学院计算机工程学院 杨世通 2014-2015-1学期
10
淮海工学院计算机工程学院 杨世通 2014-2015-1学期
2015年8月31日10时13分
C++程序设计 G计算机141
11.5 派生类的构造函数和析构函数
11.5.2含有子对象的派生类构造函数 (1)对基类数据成员初始化; (2)对子对象数据成员初始化; (3)对派生类自己简单数据成员初始化。
C++程序设计 G计算机141
第11章 继承和派生
11.1 继承与派生的概念 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 派生类的声明方式 派生类的构成 派生类成员的访问属性 派生类的构造函数和析构函数 多重继承 基类与派生类的转换 继承与组合 继承在软件开发中的重要意义
2015年8月31日10时13分

第11章继承和派生

第11章继承和派生
《C++程序设计 》网 络 教 学
电子与信息工程系
COMPUTER SCIENCE & TECHNOLOGY DEPARTMENT
已存在的类(例如“马”)称为“基类(base class)” 或“父类(father class)”。新建立的类(例如“公 马”)称为“派生类(derived class)”或“子类(son class)”。见图11.2示意。
《C++程序设计 》网 络 教 学
电子与信息工程系
COMPUTER SCIENCE & TECHNOLOGY DEPARTMENT
一个派生类不仅可以从一个基类派生,也可以从 多个基类派生。一个派生类有两个或多个基类的称 为多重继承(multiple inheritance)。
《C++程序设计 》网 络 教 学
图11.1
《C++程序设计 》网 络 教 学
图11.2
电子与信息工程系
COMPUTER SCIENCE & TECHNOLOGY DEPARTMENT
一个派生类只从一个基类派生,这称为单继承 (single inheritance),这种继承关系所形成的层次 是一个树形结构,见下图。
箭头表示继承的方向,从派生类指向基类。
电子与信息工程系
COMPUTER SCIENCE & TECHNOLOGY DEPARTMENT
面向对象程序设计有4个主要特点: 抽象 封装 继承 多态性
面向对象技术强调软件的可重用性(software reusability) 。C++语言提供了类的继承机制,解 决了软件重用问题。
《C++程序设计 》网 络 教 学

第11章 继承与派生《C++程序设计基础教程》课件

第11章 继承与派生《C++程序设计基础教程》课件

继承 调整 新增
8
11.2 派生类的构成
9
继承方式影响基类成员在派生类的访问属性
(1) 公用继承(public inheritance) 基类的公用和保护成员在派生类中保持原有访问 属性,私有成员仍为基类私有(不可访问)。
(2) 私有继承(private inheritance) 基类的公用和保护成员在派生类中成了私有成员, 私有成员仍为基类私有(不可访问) 。
(3) 受保护的继承(protected inheritance) 基类的公用和保护成员在派生类中成了保护成员, 私有成员仍为基类私有(不可访问) 。
9
11.2 派生类的构成
10
class A{ int x;
}; class B: A{ public:
void F(){ x = 1;
} };
基类的所有成员(构 造函数和析构函数除 外)都由派生类型继 承,甚至包括基类的 私有成员。但是,私 有成员的可访问域只 包括声明该成员的类 型的程序文本。
21
例11.5 析构函数的调用顺序举例22ຫໍສະໝຸດ class A{ int a;
public: A(int x):a(x) { //基类A的构造函数 cout << "construct A " << a << endl; } ~A() { //基类A的析构函数 cout << "destruct A " << a << endl; }
public:
void GetScore()
void Display()
private:
float score

第十一章继承和派生类-PPT精选文档

第十一章继承和派生类-PPT精选文档

11.1 继承与派生的基本概念
保持已有类的特性而构造新类的过程称
为继承。定义新类时可以从一个或多个 既有类中继承(即拷贝)所有的数据成 员和函数成员,然后加上自己的新成员 或重新定义由继承得到的成员。 在已有类的基础上新增自己的特性而产 生新类的过程称为派生。 被继承的已有类称为基类(或பைடு நூலகம்类) 派生出的新类称为派生类。
Person
Employee
Customer
Vendor
Salaried
Hourly
Partner Client
PartTime
FullTime
使用继承机制和方法设计和建造类定义的层次结构 对于建立一个面向对象的软件系统是不可缺少的。
11.2 派生类的定义
定义派生类的一般格式:
class <派生类名> : <继承方式1> <基类名1>, <继承方式2> <基类名2>, …, <继承方式n> <基类名n> { <派生类新定义的成员> };
派生类的定义与构成
继承方式规定了派生类中对基类成员进
行访问控制的方式。 继承方式包括三种:public(公有继承)、 private (私有继承)和protected (保护 继承)。如果省略继承方式,缺省的类 的继承方式是private。 每一个继承方式,只对紧随其后的基类 进行限定。
继承与派生的例子
汽车
客车
货车
工程车
计程车
公共汽车
旅游车
继承与派生的基本概念

继承形成一个层次结构(继承关系是相对 的),一个类可由其它类通过继承得到, 继承得到的新类称派生类(子类),被继承的 称为基类(父类)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

该用成,员必名须在 用派 基生 类类 名v{的受Aof(i:d作限:)f;h(用。() )域例内://不//BA直类类接中中可的的见ff ,如果要使
}
};
void main( )
{ B b;
b.f( );
// B 类中的 f
b.A::f( ); //A类中的f
}
即使派生类c{la中ss定Bin义:tp了zu; b与li基c A类同名但参数不同的成员
箭头表示继承的方向,从派生类指向基类。
一个派生类不仅可以从一个基类派生,也可以从 多个基类派生。一个派生类有两个或多个基类的称 为多重继承(multiple inheritance)。
关于基类和派生类的关系:派生类是基类的具体化, 而基类则是派生类的抽象。
11.2 派生类的声明方式
声明派生类的一般形式为: class 派生类名: [继承方式] 基类名 { 派生类新增加的成员 };
重写构造函数与析构函数
派生类对象结构
基类对象
对于下面的继承关系:
a b
子类对象
a b c
基类部分 子类添加部分
子类对象空间总是不小于基类 对象
class Father{ int a,b;
public: // 成员函数
}; class Son:public Father{
int c; public:
第4篇面向对象的程序设计
第11章 继承与派生 第12章 多态性与虚函数 第13章 输入输出流 第14章 C++工具
第11章 继承与派生
11.1 继承与派生的概念 11.2 派生类的声明方式 11.3 派生类的构成 11.4 派生类成员的访问属性 11.5 派生类的构造函数和析构函数 11.6 多重继承 11.7 基类与派生类的转换 11.8 继承与组合 11.9 继承在软件开发中的重要意义
已存在的类(例如“马”)称为“基类(base class)” 或“父类(father class)”。新建立的类(例如“公 马”)称为“派生类(derived class)”或“子类 (son class)”。见图11.2示意。
图11.1
图11.2
一个派生类只从一个基类派生,这称为单继承 (single inheritance),这种继承关系所形成的层次 是一个树形结构,见下图。
// 成员函数 };
11.4 派生类成员的访问属性
继承可以公有继承,保护继承和私有继承。 公有继承是普通继承,基类可以为大多数应用服 务。也可以重复继承。 保护继承是“单传”继承,只继承给自己的后代, 应用是以子孙的公有成员函数来对外展开服务的。 私有继承是“绝版”继承,该基类只继承直接的 子类,而不考虑让子类再继承下去。
构造一个派生类包括以下4部分工作:
吸收基类的成员
不论是数据成员,还是函数成员,除 构造函数与析构函数外全盘接收
改造基类成员
ቤተ መጻሕፍቲ ባይዱ
声明一个和某基类成员同名的新成员,派 生类中的新成员就屏蔽了基类同名成员称 为同名覆盖(override)
派生类新成员必须与基类成员不同名,它的
发展新成员 加入保证派生类在功能上有所发展。
继承方式包括: public(公用的),private(私有的) 和protected(受保护的),如果不写此项,则默认为 private(私有的)。
11.3 派生类的构成 派生类分为两大部分:
一部分是从基类继承来的成员 另一部分是在声明派生类时增加的部分 每一部分均分别包括数据成员和成员函数。
编制 派生 类时 可分 四步
{ B b; b.f( ); //A类中的 f b.g( ); //A类中的g b.h( ); //B类中的h
void h();
}
};
派生类的c{la定ss义Bi用n:t于pzu;描bli述c A派生类与基类的差别。派生 类中可以给pu出bl新ic:的成员,也可以对基类的成员进行重
定义。如果在派vv生ooii类dd fh中(());对基类的某个成员进行重定义, 则在派生类中对{该f(成);员//B的类访中问的是f 针对派生类中重定义
在公有派生类中的访问属性 不可访问 公有
保护
例:下面定义了两个具 有单继承关系的类A和 B,其中, A为基类,B为派生类:
class A {
int x,y; public:
void f(); void g(); }; class B : public A { int z; public: void h(); };
的成员。
g( ); //A类中的g }
};
void main( )
{ B b;
b.f( ); //B类中的 f
b.g ( ); //A类中的g
b.h( ); //B类中的h
}
派生类成员cla名ss的B作: p用ub域li嵌c A套在基类的作用域中,对
于基类的一个{pu成bl员ici:n,t 如z; 果派生类中没有定义与其同名 的成员,则该成员v名oid在f派( );生类的作用域内可见,否则,
在C++中对派生类有以下几点规定:
class A
派生类{ 除了拥有基类的所有成员(基类的构造函数
和赋值操作符in重t x载,y;函数除外)外,也可以具有新的成
员。
public: void f();
void g(); }; class B : public A {
int z; public:
void main()
面向对象程序设计有4个主要特点: 抽象 封装 继承 多态性
面向对象技术强调软件的可重用性(software reusability) 。C++语言提供了类的继承机制,解 决了软件重用问题。
11.1 继承与派生的概念
➢在C++中可重用性是通过继承(inheritance)这一 机制来实现的。继承是C++的一个重要组成部分。 ➢在C++中,所谓“继承”就是在一个已存在的类 的基础上建立一个新的类。 ➢见图11.1示意。
11.4.1 公有继承
public继承: 基类的public成员, 在派生类中成为public成员 基类的protected成员, 在派生类中成为protected 成员 基类的private成员, 在派生类中成为不可直接使用的成员
表11.1公用基类在派生类中的访问属性
公有基类的成员
私有成员 公有成员 保护成员
函数,基类的pu同bl名ic:函数在派生类中的作用域中也是不
相关文档
最新文档