复习7--继承与派生

合集下载

C语言程序设计PPT第七章继承与派生

C语言程序设计PPT第七章继承与派生
cout<<"C's constructor called."<<endl; } C::~C() { cout<<"C's destructor called."<<endl; } void C::Print() const { B::Print(); cout<<c<<endl; } int main() { C obj(5,6); obj.Print(); }
问 控 制
类中的public和protected成员,但 不能直接访问基类的private成员。
通过派生类的对象不能直接访问基类 中的任何成员
17
C++语言程序设计
protected 成员的特点与作用

成 对建立其所在类对象的模块来说,它
员 与 private 成员的性质相同。
的 对于其派生类来说,它与 public 成 访 员的性质相同。
public成员。
10
C++语言程序设计
例7-1 公有继承举例
类 成 员
class Point //基类Point类的声明 {public: //公有函数成员
void InitP(float xx=0, float yy=0)

{X=xx;Y=yy;}
访 void Move(float xOff, float yOff)
25
C++语言程序设计
多继承时派生类的声明

继 class 派生类名:继承方式1 基类名1,
承 继承方式2 基类名2,...
与{

成员声明;

第17讲(继承与派生)

第17讲(继承与派生)

第17讲教学内容7.1 类的继承与派生7.1.1继承与派生实例7.1.2 派生类的定义7.1.3派生类的生成过程7.2 访问控制7.2.1 公有继承7.2.2 私有继承7.2.3 保护继承教学重点和难点1什么叫继承?继承的作用?2派生类的声明方式3 三种继承方式下的访问控制的理解教学方法:通过举实际生活中的例子,讲解继承的概念通过程序举例演示,讲解如何产生一个派生类,以及三种继承方式下的访问控制的理解教学学时2 学时教学过程一继承概述:1什么叫继承?没有继承的话,类就只是带有相关行为的数据结构,不过继承还为编程语言增加了全新的元素。

通过继承,可以在现有类的基础上构件新类,这样,类就变成了可重用,可扩展的组件了。

现实世界中的对象一般都呈层次体系存在,也就是一种“is a”的关系。

在程序设计中,如果要在一个类之上构件另一个类,或者只是对一个了类做简单的修改来构件另一个类,就与这种关系有关。

要实现这个目的,一种途径积聚市把这个类的代码复制粘贴到另一个类,通过修改相关部分或者添加代码,就可以达到目的,创建一个与原来的类稍有不同的类。

但这种方法的缺点主要是:1)这种方法并没有建立真正的”is a”关系。

新类与原来的类相似,这只是新类共享了原来的代码,并不是因为新类与原类确实是同一个对象类型。

2)编译器并不知道两个类之间的关系,所以这两个类不是多态的----它们并非同一个事物的不同变种3)有时候并不能得到原始代码,原始代码或许只是以预编译的二进制格式存在,所以复制粘贴代码不太现实。

4)可以看到,这种复制加粘贴的方法经常容易出错误而且浪费时间,也会导致许多代码的物理拷贝残留在整个系统中,使代码维护工作困难重重。

那么,有没有一种方法,不需要复制代码,就可以“吸收”一个类的属性和行为,使其作为另外一个类的一部分?毫无疑问,C++对定义的真正的is a关系提供了内置支持。

继承关系构成了一种树状层次结构,基类和派生类之间存在着层次关系•类的继承是新的类从已有的类那里得到属性和行为,同时也可以加入新的特性。

继承与派生类PPT演示课件

继承与派生类PPT演示课件
第7章 继承与派生类
7.1 基本概念 7.2 派生类的三种继承方式 *7.3 多 重 继 承 与虚基类 习题
1
7.1 基本概念
1、继承与派生
继承是面向对象语言提供的一个重要机制,它在类与类之 间建立了层次关系。首先从下面的实例当中体会继承的概念。
class Box
{
private :
int width,height;
{…
};//同上
10
void main( )
{
ColorBox ob1;
ob1.SetWidth(1);
ob1.SetHeight(2);
ob1.SetColor(3);
ColorBox ob2;
ob2.Width = 1 ; //非法
ob2.color = 3; //×
}
如果在ColorBox内有另外一个成员函数,它能否
12
3、保护成员
用protected说明的成员称为保护成员,保护成员的访问 权限介于私有和公有之间。其规则为:
派生类的成员函数可以访问基类的保护成员,但是在基 类和派生类之外,程序不能访问类的保护成员。
class Box { protected :
int width,height; };
13
class ColorBox :public Box { private :
class Box
{
private :
int width,height;
public:
void SetWidth(int w) { width = w;}
void SetHeight(int h) {height = h;}
};
//同上

c++7继承与派生

c++7继承与派生

3
继承与派生问题举例
类 的 继 承 与 派 生
工具车
交通工具
汽车
小汽车
卡车
旅行车
轿车
面包车
4
继承与派生问题举例
类 的 继 承 与 派 生
动物
猴子


狮子
5

猎豹
类继承与派生问题举例 的 几何形状 继 承 与 派 生

矩形
6
类继承与派生问题举例 的 雇员 继 承 与 兼职技术人员 管理人员 派 生
15
例7-2 私有继承举例
类 成 员 的 访 问 控 制
16
class Rectangle: private Point //派生类声明 {public: //新增外部接口 void InitR(float x, float y, float w, float h) {InitP(x,y);W=w;H=h;} //访问基类公有成员 void Move(float xOff, float yOff) {Point::Move(xOff,yOff);} float GetX() {return Point::GetX();} float GetY() {return Point::GetY();} float GetH() {return H;} float GetW() {return W;} private: //新增私有数据 float W,H; };
29
派 生 继承时的构造函数 类 的 基类的构造函数不被继承,派生类中需要 构 声明自己的构造函数。 造 声明构造函数时,只需要对本类中新增成 、 员进行初始化,对继承来的基类成员的初 析 始化,自动调用基类构造函数完成。 构 派生类的构造函数需要给基类的构造函数 传递参数 函 数

7章_继承与派生

7章_继承与派生

例1 void main() class A{ { A a; protected: B b; int X; b.Function(); }; a.X=5; class B:public A b.X=7; { } public: 错误,水平访问时 void Function(); 保护成员相当于 }; 私有成员 void B::Function() { 正确,垂直访问时 X=5; 保护成员相当于 }
例(续2)
#include <iostream> using namespace std; void main( ) { Rectangle rect; rect.InitR(2,3,20,10); //水平访问 rect.Move(3,2); // 直接调用基类公有成员函数 cout<<rect.GetX()<<","<<rect.GetY()<<"," <<rect.GetH()<<", "<<rect.GetW()<<endl; } 输出: 5,5,10,20
公有成员
例7_1:分析下列程序中的访问权限
class Point { public: void InitP(int xx,int yy); void Move(int xOff,int yOff); int GetX() {return X;} int GetY() {return Y;} private: int X,Y; }; //基类声明结束 void Point::InitP(int xx,int yy) //函数成员实现 { X=xx; Y=yy; } void Point::Move(int xOff,int yOff) { X+=xOff; Y+=yOff; }

第七章 继承和派生

第七章 继承和派生

第七章继承和派生一、基类和派生类1. 在C++中,可以从一个类派生出另一个类,前者称为基类或父类,后者称为派生类或子类。

一个派生类可以从一个或多个基类派生。

从一个基类派生的继承称单继承,从多个基类派生的继承称多继承。

2. 单继承定义格式:class 派生类:继承方式基类{ 派生类新定义成员;};其中,“派生类”是从“基类”按指定的“继承关系”派生出的、新定义的一个类的名字。

“继承方式”有三种:(1)public 公有继承(2)private 私有继承(3) protected 保护继承3. 多继承定义格式:class 派生类:继承方式1 基类1,继承方式2 基类2,…{ 派生类新定义成员;};4. 公有继承:当派生类的继承方式是public继承时,基类的public和protected成员的访问属性在派生类中保持不变,而基类的private成员不可访问,即基类的public和protected成员分别作为派生类的public和protected成员,派生类的其他成员可以直接访问它们。

例1:class B{ private: int x; protected: int y; public: int z;…};class A:public B{ private: int a; protected: int b; public: int c;…}; A a;(1)类B是基类,有3个数据成员x、y、z,分别是private、protected、public属性。

类A是派生类,有3个数据成员a、b、c,分别是private、protected、public属性。

由于类A是从类B公有派生的,类B中的public、protected属性的成员可继承到类A中来,且保持原来的属性。

故类A中有5个数据成员,即a、b、c、y。

(2)可以通过类A的对象a直接访问public成员,即z和c,并不能访问a、b、y数据成员。

《继承与派生 》课件

《继承与派生 》课件
《继承与派生》PPT 课件
目录
CONTENTS
• 继承与派生的基本概念 • 继承的方式 • 派生类的构造函数和析构函数 • 继承与多态 • 继承与重载
01
继承与派生的基本 概念
继承的定义
继承是面向对象编程中的一个重 要概念,它允许一个类(子类) 继承另一个类(父类)的属性和
方法。
通过继承,子类可以复用父类的 代码,减少代码冗余,提高代码
保护继承
总结词
保护继承是指基类的保护成员在派生类 中保持保护属性,可以被派生类和派生 类的对象访问。
VS
详细描述
保护继承时,基类的保护成员在派生类中 保持保护属性,可以被派生类和派生类的 对象访问。这种继承方式使得基类的保护 成员成为派生类的保护成员,可以被派生 类和派生类的对象访问。因此,派生类可 以继承基类的保护成员函数和变量。
03
派生类的构造函数 和析构函数
派生类的构造函数
派生类构造函数的作用
派生类构造函数用于初始化派生类对象,包括调用基类构造函数 和执行派生类特有的初始化操作。
派生类构造函数的执行顺序
派生类构造函数的执行顺序是在创建派生类对象时,先调用基类构 造函数,然后执行派生类构造函数体中的代码。
派生类构造函数的参数
继承和派生共同实现 了面向对象编程中的 代码复用和多态性。
派生是继承的一种表 现形式,通过派生可 以创建新的类。
02
继承的方式
公有继承
总结词
公有继承是ቤተ መጻሕፍቲ ባይዱ基类的公有成员在派生类中仍为公有成员,可以被派生类和派生类的对象访问。
详细描述
公有继承时,基类的公有成员在派生类中保持公有属性,派生类可以访问基类的公有和保护成员。这种继承方式 使得基类的公有成员成为派生类的公有成员,可以被派生类和派生类的对象直接访问,因此派生类可以继承基类 的公有成员函数和变量。

第7章 继承和派生

第7章  继承和派生
12
例:7.3分析下列程序的结果:
class Base1 { public: Base1(int i ) { b1=i ; cout<<"Constructor of Base1."<<endl; }
void Print() const
private:
{ cout<<b1<<endl; }
int b1;
Member ( int i)
{ m=i ; cout<<"Constructor of Member."<<endl; } int GetM ( ) { return m; } private: int m; };
16
class Derived : public Base2, public Base1 ,public Base3
{ b1=i;
b2=j;
cout<<"Base's constructor called."<<b1<<","<<b2<<","<<endl;
} Base::~Base ( ) {cout<<"Base's }
destructor called."<<b1<<","<<b2<<","<<endl;
23
Base's destructor called.1,2,
27
§7.4多继承与虚基类
§7.4.1多继承中的二义性问题 产生二义性问题主要有两种情况: ㈠产生二义性问题的第一种情况如下例: 如P215图7.4(a) class Base1 { public: void fun(); };
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复习题7
1.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。

对两个有相同名字的数据成员进行访问时,如果没有作用域分隔符限定,对此数据成员的访问将出现歧义。

2.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。

对两个有相同名字的数据成员进行访问时,如果没有作用域分隔符限定,对此数据成员的访问将出现歧义。

3.类的继承是指子类继承基类的___数据成员_____和成员函数。

4.在保护派生中,基类权限为Private的成员在派生类中_不能直接访问___。

5. this指针存在的目的是( B)
A.保证基类公有成员在子类中可以被访问
B.保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
C.保证基类保护成员在子类中可以被访问
D.保证基类私有成员在子类中可以被访问
6.在哪种派生方式中,派生类可以访问基类中的protected成员( B)
A.public和private B.public和protected
C.protected和private D.仅protected
7. 第7章习题:1;2;4;8。

相关文档
最新文档