C++课件第十一章继承和派生类

合集下载

《C#继承和接口》课件

《C#继承和接口》课件

继承与接口的使用
继承与接口的关系
派生类既可以继承基类,也可 以实现接口。
类实现接口
类通过实现接口的方式,来表 明它提供了该接口所定义的所 有方法和属性。
接口实现类
接口只定义方法和属性,而类 则需要实现具体的处理过程。
实战案例
1
需求说明
开发一个扫码点餐系统,支持顾客选择餐品、付款、生成订单、和查看历史订单等功 能。
C#继承和接口
C#继承和接口是面向对象编程中重要的概念。本课件将介绍继承、接口、抽 象类以及它们的应用场景和使用方法。
继承
概念
继承是指派生类获取基类成员 的过程。派生类可以获得基类 的属性、方法和字段。
单继承
C#只支持单继承。一个类只能 有一个基类。
多层继承
派生类可以派生出新的类,也 可以同时继承多个接口,形成 多层继承的关系。
接口定义一个合约,规定了实现它的 类型需要提供什么方法和属性。
接口继承
接口可以从一个或多个接口继承。
显式实现接口方法
如果一个类实现的多个接口中有相同 名称的方法,可以使用显式实现的方 式进行区分。
பைடு நூலகம்
接口与抽象类
抽象类和接口的区别
抽象类可以包含成员变量,但接口中没有成员变量。
抽象类和接口的应用场景
抽象类适合用于一组相关的类,而接口适合用于一组不同的类。
• 分继离承。会增加复杂度, 而接口一般只能有方 法和属性。
继承和接口应用的 场景
• 继承适用于类的重用 和拓展,接口适用于 不同类型的统一约束。
• 不同的应用场景需要 不同的设计方案。
继承和接口的对比
• 继承和接口可以结合 使用。
• 继承和接口都是面向 对象编程中的重要概 念,需要熟练掌握。

继承PPT课件

继承PPT课件
• 继承方式包括: public(公用的), private(私有的) protected(受保护的)
• 默认为private(私有的)
派生类的声明
假设已声明了一个基类Student,通过单继承建立一个派生类 Student1:
class Student1: public Student //声明基类是Studen
void display1( ); private:
int age; string addr; };
void Student1::display1( ) {cout<<″num: ″<<num<<endl; //合法 cout<<″name: ″<<name<<endl; cout<<″sex: ″<<sex<<endl; cout<<″age: ″<<age<<endl; cout<<″address: ″<<addr<<endl; }
int age; string addr; };
public继承
• main函数改为(假设对象stud中已有数据):
int main( ) {Student1 stud; //定义派生类Student1的对象stud
┆ //派生类对象调用基类公用成员函数 stud.display( );
//派生类对象调用派生类公用成员函数 stud.display_1(); return 0; }
private继承
•不能通过派生类对象引用从私有基类继承 过来的任何成员。 •派生类的成员函数不能访问私有基类的私 有成员,但可以访问私有基类的公用成员。

派生类

派生类

继承与派生类1 知识要点1.掌握继承和派生的定义,派生类的定义方法。

(1)掌握继承的两种类型:单继承和多继承。

(2)掌握private,public,protected三种继承方式的特点。

继承方式决定了基类中的成员在派生类中的属性。

三种继承方式的共同点:基类的private成员在派生类中不可见。

区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

(3)掌握派生类中的构造函数和析构函数的使用。

基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。

派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。

(4)掌握派生类的同名覆盖规则。

(5)掌握赋值兼容规则。

基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。

2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。

派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。

3.掌握虚基类的概念和定义方法。

在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。

2 典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。

基类和派生类

基类和派生类
这里说的访问来自两个方面:一是派生类中的新增成 员对从基类继承来的成员的访问;二是在派生类外部通 过派生类的对象对从基类继承来的成员的访问。
5
(1)公有继承(public)
当类的继承方式为公有继承时,基类的公有和保 护成员的访问属性在派生类中不变,而基类的私有 成员不可访问,
即基类的公有成员和保护成员被继承到派生类中 仍作为派生类的公有成员和保护成员,派生类的其 他成员可以直接访问它们。
具体赋值规则如下: 派生类的对象可以赋值给基类对象。 派生类的对象可以初始化基类对象的引用。 派生类对象的地址可以赋给指向基类对象的 指针。
15
例如: class A{...};
class B: public A
{void fun() {...}}; A a; B b; a=b; //将对象b中所含类A成员的值赋给对象a A &a1=b; //用派生类对象初始化基类对象的引用 A *pa =&b;
22
基类名1,继承方式2 基类名2,… {…} ;
{ 派生类类体
class C : public
};
A , private B
多重继承允许一个派生类同时继 {…} ; // C 公有
承多个基类中的成员,支持了软件 继承 A,私有继
的重用性,但也可能带来大量的二 承 B
义性问题。 17
复合与继承在软件渐增式开发中的应用
10
3.在派生类中重定义基类的函数
派生类自动继承了基类中定义的数据成员和成员函数。 如果派生类认为基类中某个成员函数的实现不能满足需 要,可以在派生类中重新定义该函数。
重定义基类的成员函数需要使用和该函数相同的函数 名和参数列表,如果参数列表不同,就是函数重载而不 是函数的重定义了。

简述派生类的继承方式

简述派生类的继承方式

简述派生类的继承方式派生类(子类)的继承方式是面向对象编程中的一种重要的技术。

通过继承,子类可以继承父类的属性和方法,并且还可以额外拥有自己的属性和方法。

在继承中,子类可以选择不同的继承方式,以满足不同的需求和场景。

常见的继承方式有三种:公有继承、私有继承和保护继承。

1. 公有继承:公有继承是最常用的继承方式,也是默认的继承方式。

在公有继承中,子类继承了父类的公有成员和保护成员,但是不继承父类的私有成员。

公有继承的特点是子类可以访问和调用父类的公有成员和保护成员,可以重写父类的方法,并可以添加新的成员。

这种继承方式常用于描述"is-a"关系,即子类是父类的一种特殊情况。

2. 私有继承:私有继承是一种特殊的继承方式,在私有继承中,子类继承了父类所有的成员,包括公有成员、保护成员和私有成员。

但是,子类不能访问和调用父类的任何成员,除非在子类中重新定义相应的方法。

私有继承的特点是子类可以重写父类的方法,并可以添加新的成员,但是不能访问和调用父类的成员。

这种继承方式常用于描述"has-a"关系,即子类具有父类的功能。

3. 保护继承:保护继承是介于公有继承和私有继承之间的一种继承方式。

在保护继承中,子类继承了父类的保护成员和公有成员,但是不能继承父类的私有成员。

子类可以访问和调用父类的保护成员和公有成员,可以重写父类的方法,并可以添加新的成员。

保护继承的特点是子类可以访问和调用父类的保护成员,但是不能访问和调用父类的私有成员。

这种继承方式常用于描述"is-implemented-in-terms-of"关系,即子类使用父类的实现方式。

总之,派生类的继承方式提供了灵活多样的方式来实现代码的复用和扩展。

在选择继承方式时,需要根据具体的需求和场景来选择合适的方式。

公有继承适用于描述"is-a"关系,私有继承适用于描述"has-a"关系,而保护继承适用于描述"is-implemented-in-terms-of"关系。

C++基类和派生类

C++基类和派生类

C++基类和派⽣类整理⾃ 通过继承机制,可以利⽤已有的数据类型来定义新的数据类型。

所定义的新的数据类型不仅拥有新定义的成员,⽽且还同时拥有旧的成员。

我们称已存在的⽤来派⽣新类的类为基类,⼜称为⽗类。

由已存在的类派⽣出的新类称为派⽣类,⼜称为⼦类。

在++中,⼀个派⽣类可以从⼀个基类派⽣,也可以从多个基类派⽣。

从⼀个基类派⽣的继承称为单继承;从多个基类派⽣的继承称为多继承。

派⽣类的定义格式 单继承的定义格式如下: class <派⽣类名>:<继承⽅式><基类名> { <派⽣类新定义成员> }; 其中,<派⽣类名>是新定义的⼀个类的名字,它是从<基类名>中派⽣的,并且按指定的<继承⽅式>派⽣的。

<继承⽅式>常使⽤如下三种关键字给予表⽰: public 表⽰公有基类; private 表⽰私有基类; protected 表⽰保护基类; 多继承的定义格式如下: class <派⽣类名>:<继承⽅式1><基类名1>,<继承⽅式2><基类名2>,… { <派⽣类新定义成员> }; 可见,多继承与单继承的区别从定义格式上看,主要是多继承的基类多于⼀个。

派⽣类的三种继承⽅式 公有继承(public)、私有继承(private)、保护继承(protected)是常⽤的三种继承⽅式。

1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派⽣类的成员时,它们都保持原有的状态,⽽基类的私有成员仍然是私有的。

2. 私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派⽣类的私有成员,并且不能被这个派⽣类的⼦类所访问。

3. 保护继承(protected) 保护继承的特点是基类的所有公有成员和保护成员都成为派⽣类的保护成员,并且只能被它的派⽣类成员函数或友元访问,基类的私有成员仍然是私有的。

继承与派生类答案

继承与派生类答案

继承与派生类知识要点1.掌握继承和派生的定义,派生类的定义方法。

(1)掌握继承的两种类型:单继承和多继承。

(2)掌握private,public,protected三种继承方式的特点。

继承方式决定了基类中的成员在派生类中的属性。

三种继承方式的共同点:基类的private成员在派生类中不可见。

区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

(3)掌握派生类中的构造函数和析构函数的使用。

基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。

派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。

(4)掌握派生类的同名覆盖规则。

(5)掌握赋值兼容规则。

基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。

2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。

派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。

3.掌握虚基类的概念和定义方法。

在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。

典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。

继承与派生实验报告

继承与派生实验报告

继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。

本文将通过实验来探讨继承与派生的概念、原理和应用。

实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。

实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。

2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。

在子类中,我们可以重写父类的方法或添加新的方法。

3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。

4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。

实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。

在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。

在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。

而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。

通过实验,我们发现继承与派生的优势在于代码的复用和扩展。

我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。

同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。

讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。

继承与派生类答案

继承与派生类答案

继承与派生类知识要点1.掌握继承和派生的定义,派生类的定义方法。

(1)掌握继承的两种类型:单继承和多继承。

(2)掌握private,public,protected三种继承方式的特点。

继承方式决定了基类中的成员在派生类中的属性。

三种继承方式的共同点:基类的private成员在派生类中不可见。

区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。

(3)掌握派生类中的构造函数和析构函数的使用。

基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。

派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。

(4)掌握派生类的同名覆盖规则。

(5)掌握赋值兼容规则。

基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。

2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。

派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。

3.掌握虚基类的概念和定义方法。

在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。

典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。

A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。

派生与继承

派生与继承

继承与派生
(2)改造。改造是指对吸收进来的基类成员的改 改造。 改造 造。它包括两个方面:一个是对基类成员访问 它包括两个方面: 控制的调整, 控制的调整,它是通过派生类定义时的继承方 式来确定。另一个就是对基类成员的隐藏, 式来确定。另一个就是对基类成员的隐藏,即 在派生类中声明一个与基类成员同名的新成员, 在派生类中声明一个与基类成员同名的新成员, 这个新成员就隐藏了上层的所有同名成员。 这个新成员就隐藏了上层的所有同名成员。这 时,在派生类中或者通过派生类的对象来直接 使用该成员名, 使用该成员名,就只能访问到派生类中声明的 同名成员,这称为同名隐藏或同名覆盖。 同名成员,这称为同名隐藏或同名覆盖。
继承与派生
继承性的具体实现也就是一个派生类的建立过程。 继承性的具体实现也就是一个派生类的建立过程。 class 派生类名 : 继承方式 基类名 继承方式 基类名 基类名1, 基类名2, … , 继承方式 基类名 基类名n { 新增派生类成员声明; 新增派生类成员声明 }; 继承方式关键字有三个: 继承方式关键字有三个:public、private、protected。 、 、 。 继承方式关键字只对紧随其后的基类起作用。 继承方式关键字只对紧随其后的基类起作用。 在继承与派生的过程中,一个基类可以派生出多个派生类, 在继承与派生的过程中,一个基类可以派生出多个派生类, 每一个派生类又可以作为基类再派生出新的派生类, 每一个派生类又可以作为基类再派生出新的派生类,基类和 派生类是相对而言的。这样,一代一代地派生下去, 派生类是相对而言的。这样,一代一代地派生下去,就形成 了一个相互关联的有层次的类的家族,称为类族。在类族中, 了一个相互关联的有层次的类的家族,称为类族。在类族中, 作为上下层直接联系而参与派生出某类的基类称为该派生类 的直接基类, 的直接基类,而基类的基类甚至更高层的基类则称为间接基 类。

继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(转)

继承与派生:派生类对基类成员的访问控制之保护继承与私有继承(转)

继承与派⽣:派⽣类对基类成员的访问控制之保护继承与私有继承(转)鸡啄⽶在编程⼊门系列上⼀节中讲了,这⼀节接着讲剩下的两种继承⽅式:保护继承和私有继承。

⼀.保护继承在保护继承⽅式中,基类的公有成员和保护成员被派⽣类继承后变成派⽣类的保护成员,⽽基类的私有成员在派⽣类中不能访问。

因为基类的公有成员和保护成员在派⽣类中都成了保护成员,所以派⽣类的新增成员可以直接访问基类的公有成员和保护成员,⽽派⽣类的对象不能访问它们,上⼀讲鸡啄⽶说过,类的对象也是处于类外的,不能访问类的保护成员。

对基类的私有成员,派⽣类的新增成员函数和派⽣类对象都不能访问。

通过上述保护继承的讲解,相信⼤家对类的有更加深刻的理解了。

假设A类是基类,B类是从A类继承的派⽣类,A类中有保护成员,则对派⽣类B来说,A类中的保护成员和公有成员的访问权限是⼀样的。

⽽对A类的对象的使⽤者来说,A类中的保护成员和私有成员都⼀样不能访问。

可见类中的保护成员可以被派⽣类访问,但是不能被类的外部对象(包括该类的对象、⼀般函数、其他类等)访问。

我们可以利⽤保护成员的这个特性,在软件开发中充分考虑数据隐藏和共享的结合,很好的实现代码的复⽤性和扩展性。

鸡啄⽶举个简单的例⼦讨论下保护成员的访问属性。

class Base{protected:int x; // 基类的保护成员};int main(){Base base;base.x = 0; // 编译报错return0;}这段代码在编译的时候会报错,错误就出在通过对象base访问保护成员x时,就像上⾯讲的,对Base类的对象base的使⽤者来说,Base 类中的保护成员x和私有成员的访问特性是⼀样的,所以对象base不能访问x,这样跟使⽤私有成员⼀样通过保护成员实现了数据的隐藏。

class Base{protected:int x; // 基类的保护成员};class Child : public Base{public:void InitX();};void Child::InitX(){x = 0;}对上⾯的派⽣类Child来说,基类Base中的保护成员x和公有成员的访问权限⼀样,所以Child类的成员函数InitX可以访问Base类的保护成员x。

新标准C++程序设计5. 继承和派生

新标准C++程序设计5. 继承和派生
所有的学生都有的共同方法(成员函数): 是否该留级 是否该奖励
5
需要继承机制的例子
而不同的学生,又有各自不同的属性和方法 研究生 导师 系 大学生 系 中学生 竞赛特长加分
6
需要继承机制的例子
➢如果为每类学生都从头编写一个类,显然会有 不少重复的代码,浪费。
7
需要继承机制的例子
➢如果为每类学生都从头编写一个类,显然会有 不少重复的代码,浪费。
class CPoint {
double x,y; };
class CCircle:public CPoint {
double r; };
31
复合关系的使用
几何形体程序中,需要写“点”类,也需要写“圆”类
class CPoint {
double x,y; };
class CCircle:public CPoint {
class CStudent { private: string name; string id; //学号 char gender; //性别,'F'代表女,'M'代表男 int age; public: void PrintInfo(); void SetInfo( const string & name_,const string & id_, int age_, char gender_ ); string GetName() { return name; }
int v3; };
13
派生类对象的内存空间
派生类对象的体积,等于基类对象的体积,再加上派 生类对象自己的成员变量的体积。在派生类对象中,包 含着基类对象,而且基类对象的存储位置位于派生类对 象新增的成员变量之前。

C++类的继承

C++类的继承
7
CBox类的使用
int main() { CBox b1; CBox b2; CBox b3;
用于解决几个 的体积计算和 求和问题
double v = 0 ; v = b1.Volume() + b2.Volume() + b3.Volume() ; cout<<"sum of the volume:"<<v<<endl; return 0; }
CBox() { cout<<"Default constructor called."<<endl; m_height=1.0; m_width=1.0; m_height=1.0; } ~CBox() { cout<<"Destructor called."<<endl; } double Volume() { return m_length*m_width* m_height; } };
24
例:定义类Point,然后定义类Point的派生类Circle。
#include <iostream> using namespace std; class Point // 定义基类,表示点 { private: int x; int y; public: // 设置坐标 void setPoint(int a, int b) { x=a; y=b; }; int getX() { return x; }; // 取得X坐标 int getY() { return y; }; // 取得Y坐标 };
生类。
不继承某些基类成员的原因: 派生类自动包含用来定义自己的那个类的所有数 注意: 不继承,指的是这部分成员不作为派生类对象的成 • 据成员,还有条件地包含了函数成员。 派生类总是有自己的构造函数和析构函数。 员存在,但是仍作为该派生类对象的基类组成部分 • 如果基类有赋值运算符,派生类也将提供。 ---该类继承了基类的数据成员和函数成员。 而存在。

C#派生和继承(派生类与基类)

C#派生和继承(派生类与基类)

C#派⽣和继承(派⽣类与基类)using System;using System.Collections.Generic;using System.Text;namespace继承{class Program{static void Main(string[] args){Mammal mammal = new Mammal();Console.WriteLine("我是⼀只哺乳动物");mammal.Scukle();mammal.Breate();mammal.Sleep();mammal.Message();}}class Mammal : Vertebrate//派⽣类:基类{private string arms;private string legs;private int age;public int Age{set { age = value; }get { return age; }}public Mammal(){arms = "前肢";legs = "后肢";Age = 0;Weigth = 10;Temperature = 37;}public void Scukle(){Console.WriteLine("哺乳");}public void Message(){Console.WriteLine("体重:{0}", Weigth);Console.WriteLine("年龄:{0}", Age);Console.WriteLine("体温:{0}", Temperature);Console.WriteLine("我有{0}和{1}", arms, legs);}}}using System;using System.Collections.Generic;using System.Text;namespace继承{class Vertebrate{private string spine;private double weigth;private double temperature;public double Weigth{set{if (value < 0){weigth = 0;}else{weigth = value;}}get { return weigth; }}public double Temperature{set{if (value < 0){temperature = 0;}else{temperature = value; }}get { return temperature; } }public Vertebrate(){spine = "脊柱";weigth = 0;temperature = 0;}public void Breate(){Console.WriteLine("呼吸"); }public void Sleep(){Console.WriteLine("睡觉"); }}}。

继承和派生复习

继承和派生复习

继承和派生练习一、选择题1、关于保护继承,下列说法错误的是()。

A、保护继承的特点是基类的所有公用成员和保护成员都成为派生类的保护成员。

B、派生类对象不能访问基类中的任何成员。

C、派生类的对象可以访问基类的公有成员。

D、保护继承的派生类和私有继承的派生类,对基类成员访问属性是相同的。

2、关于私有继承,下列说法错误的是()。

A、基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问他们。

B、基类的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员不能直接访问他们。

C、基类的私有成员,派生类的成员和派生类的对象都无法访问。

D、派生类的对象无法访问基类的所有成员。

3、在公有继承中,基类中的保护成员作为派生类的()。

A、公有成员B、私有成员C、保护成员D、私有成员函数4、基类()在派生类中的性质和继承的性质一样。

A、公有成员B、私有成员C、保护成员D、私有成员函数5、派生类的对象对它的基类成员中的()是可以访问的。

A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的私有成员6、C++类体系中,不能被派生类继承的有()。

A、构造函数B、虚函数C、静态成员函数D、赋值操作函数7、下列说法错误的是()。

A、公有继承的基类中的public成员在派生类中仍是public的B、公有继承的基类中的private成员在派生类中仍是private的C、私有继承的基类中的public成员在派生类中变成private的D、保护继承的基类中的public成员在派生类中变成protected的8、下列对继承的描述中,错误的是()。

A、析构函数不能被继承B、派生类也是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变9、下列对基类和派生类关系的描述中,错误的是()。

A、派生类是基类的具体化B、派生类是基类的子集C、派生类是基类定义的延续D、派生类是基类的组合10、C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。

5.2 基类和派生类

5.2 基类和派生类

5.2 基类和派生类在C++中,当一个类被其他类继承时,被继承的类称为基类(base class)。

继承其他类特性的类称为派生类(derived class)。

从本质上看,基类是具有一个类集合中的公共特性,派生类在继承基类特性的同时可以加入自己独有的特性。

基类与派生类之间反映出下述三种不同的现象:(1)派生类是基类的具体化。

即模拟概念层次,表示“is-a”的关系。

(2)派生类是基类的延迟定义。

可以定义一个抽象基类,定义一些操作,使它们服从一定的协议,但许多可能并未实现,然后定义非抽象的派类,实现抽象基类中定义的行为。

这时派生类不是基类的具体化,而是抽象类的实现。

在JA V A中,有专门的纯虚类,称为接口,其作用就是为不同的类提供一个统一的接口,同时间接实现多继承(JA V A不支持多继承)。

(3)派生类是基类的结合。

当一个派生类有多于一个的基类时,它们组合在一起形成具有所有基类行为的类型。

这时要注意,不要用继承表达聚合关系。

5.2.1 基类与派生类的说明先看一个例子。

[例5.1] 派生类的说明EX5_1.CPP。

继承基类的派生类定义的一般形式:class derived_class_name:access_specifier base_class_name{……};其中access_specifier可以是3个关键字之一:public、private(默认值)或protected。

派生类也称为子类、导出类。

它具有下述特点:(1)可在基类所提供有基础上包含新成员;(2)可在自己类中隐藏基类的任何成员;(3)为新类重新定义基类中的函数;[例5.2] 子类的特点EX5_2.CPP。

5.2.2 派生类的继承权与访问域派生类的继承权如果不能有效在加以限制,就不能按照实际情况表达求解问题的复杂性。

因此访问权限是一个很重要的问题。

(1)对于基类的私有成员,派生类及派生类的使用者无权访问。

(2)对于基类的公有成员,则按派生类的定义,分为三种情况:①私有派生,继承基类的公有成员作为自己的私有成员,这些成员只能被派生类的成员函数访问。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档