第3章 继承和派生习题
继承与派生习题
一、选择填空1.下列对派生类的描述中,()是错的。
A.一个派生类可以作另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员。
3.派生类的构造函数的成员初始化列表中,不能包含()。
A.基类的构造函数;B.派生类中对象成员的初始化;C.基类的对象成员的初始化;D.派生类中一般数据成员的初始化。
4.设置虚基类的目的是()A.简化程序;B.消除二义性;C.提高运行效率D.减少目标代码5. C++类体系中,能被派生类继承的是()。
A.构造函数B.虚函数C.析构函数D.友元函数6.设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7. 设有如下程序:#include<iostream.h>class A{ public: int i;display() { cout<<”class A\n”; }};class B{public: int i;display() { cout<<”cla ss B\n”; }};class C: public: A, public B{ int j;public:int i;show(){j=i*i; display();}};void main(){C demo;demo.show();}主程序运行时将( )A. 因变量i的重复定义而报错B. 因对象demo间接调用display函数时产生歧义性而报错C. 因类定义的语法错而不能运行D. 没有语法错,正常输出结果8 若要用派生类的对象访问基类的保护成员,以下观点正确的是( )A.不可能实现B.可采用保护继承C.可采用私有继承D.可采用公有继承二.填空题1.派生类可以定义其_______________中不具备的数据和操作。
继承和派生习题
继承和派生习题一、单选题1.若类A和类B的定义如下:class A{int i,j;public:int geti(){return i;}};class B: public A{int k;public:void make(){k=i*j;}};则上述中,()是非法的表达式。
A.k=i*j B.int k; C.return i; D.void make();2.关于公有继承,下列说法错误的是()。
A.基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。
B.派生类的其他成员可以直接访问基类的公有成员和保护成员。
C.派生类的对象可以访问基类的私有成员。
D.派生类成员和对象都无法访问基类的私有成员。
3.下列说法中错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public的;B.公有继承时基类中的private成员在派生类中仍是private的;C.私有继承时基类中的public成员在派生类中是private的;D.保护继承时基类中的public成员在派生类中是protected的;4.在公有继承中,基类中的公有成员作为派生类的()。
A.公有成员B.私有成员C.保护成员D.私有成员函数5.基类中的()不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。
A.公有成员B.私有成员C.保护成员D.私有成员函数6.在下面的表达式中,不表示虚继承的是()。
A.virtual publicB.public virtualC.publicD.virtual7.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.下面叙述错误的是()。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问9.派生类的对象对它的基类成员中()是可以访问的。
继承与派生
继承与派生一、选择填空。
1、下列对派生类的描述中,()是错的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D。
2、派生类的对象对它的基类中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员答案:A。
3、对基类和派生类的关系描述中,()是错的。
A、派生类是基类的具体化B.派生类是基类的子集C.派生类是基类定义的延续、D.派生类是基类的组合答案:B。
4、派生类的构造函数的成员函数初始值表中,不能包含()。
A.基类的构造函数B.派生类中子对象的初始化C.基类的子对象初始化D.派生类中一般数据成员的初始化答案:C。
5、关于子类型的描述中,()是错的。
A.子类型就是指派生类是基类的子类型B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型C.在公有继承下,派生类是基类的子类型D.子类型关系是不可逆的答案:A。
6、关于多继承二义性的描述中,()是错的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性B.解决二义性的最常用的方法是对成员名的限定法C.基类和派生类中同时出现的同名函数,也存在二义性问题D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性答案:C。
7、设置虚基类的目的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码答案:B。
8、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化()。
A.与虚基类下面的派生类个数有关B.多次C.二次D.一次答案:D。
二、判断下列描述的正确性,对者划∨,错者划×∨1.C++语言中,既允许单继承,有允许多继承。
继承和派生测试题
继承和派生练习选择题单选题1.下列虚基类的声明中,正确的是()。
A. class virtual B:public AB. virtual class B:public AC. class B:public A virtualD. class B: virtual public A2.C++类体系中,不能被派生类继承的有()。
A. 构造函数B. 虚函数C. 静态成员函数D. 赋值操作函数3.下列说法错误的是()。
A. 公有继承的基类中的public成员在派生类中仍是public的B. 公有继承的基类中的private成员在派生类中仍是private的C. 私有继承的基类中的public成员在派生类中变成private的D. 保护继承的基类中的public成员在派生类中变成protected的4.下列对继承的描述中,错误的是()。
A. 析构函数不能被继承B. 派生类也是基类的组合C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员D. 派生类中继承的基类成员的访问权限到派生类保持不变5.下列对基类和派生类关系的描述中,错误的是()。
A. 派生类是基类的具体化B. 派生类是基类的子集C. 派生类是基类定义的延续D. 派生类是基类的组合6.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A. 复用B. 继承C. 封装D. 引用7.C++类体系中,能被派生类继承的是()。
A. 构造函数B. 虚函数C. 析构函数D. 友元函数8.关于多继承二义性的描述,()是错误的。
A. 派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B. 一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C. 解决二义性最常用的方法是作用域运算符对成员进行限定D. 派生类和它的基类中出现同名函数时,将可能出现二义性9.下列对派生类的描述中,()是错误的。
继承和派生
继承性和派生类8.1 判断题× 1.派生类只继承基类中的公有成员和保护成员,而不继承私有成员。
× 2.多重继承是指一个基类派生出多个派生类的情况。
√ 3.单重继承是指派生类只有一个基类的情况。
√ 4.派生类还可以作基类派生出新的派生类。
√ 5.派生类中成员的访问权限与基类的继承方式有关。
√ 6.继承反映了类之间“是”的关系,组合反映了类之间“有”的关系。
× 7.基类中成员在派生类中都是可以访问的。
× 8.私有继承中基类的私有成员在派生类中还是私有的。
√ 9.保护继承方式下基类的保护成员在派生类仍是保护成员。
8.2 单选题1.下列关于继承的描述中,错误的是( B )。
A.继承是重用性的重要机制B.C++语言支持单重继承和双重继承C.继承关系不是可逆的D.继承是面向对象程序设计语言的重要特性2.下列关于基类和派生类的描述中,错误的是( C )。
A.一个基类可以生成多个派生类B.基类中所有成员都是它的派生类的成员C.基类中成员访问权限继承到派生类中不变D.派生类中除了继承的基类成员还有自己的成员3.下列关于派生类的描述中,错误的是( D )。
A.派生类至少有一个基类B.一个派生类可以作另一个派生类的基类C.派生类的构造函数中应包含直接基类的构造函数D.派生类默认的继承方式是public4.派生类的对象可以直接访问的基类成员是( A )。
A.公有继承的公有成员B.保护继承的公有成员C.私有继承的公有成员D.公有继承的保护成员5.下列描述中,错误的是( D )。
A.基类的protected成员在public派生类中仍然是protected成员B.基类的private成员在public派生类中是不可访问的C.基类public成员在private派生类中是private成员D.基类public成员在protected派生类中仍是public成员6.派生类构造函数的成员初始化列表中,不能包含的初始化项是( B )。
继承与派生习题
1.概念填空题1.1在C++中,三种派生方式的说明符号为、、不加说明,则默认的派生方式为。
1.2当公有派生时,基类的公有成员成为派生类的;保护成员成为派生类的;私有成员成为派生类的。
当保护派生时,基类的公有成员成为派生类的;保护成员成为派生类的;私有成员成为派生类的。
1.3 派生类的构造函数一般有3项工作要完成:首先,其次,最后。
1.4多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现。
在派生类中采用或来消除该问题。
2.选择题2.1下面对派生类的描述中,错误的是()。
A.一个派生类可以作为另外一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变2.2下列对友元关系叙述正确的是()。
A.不能继承B.是类与类的关系C.是一个类的成员函数与另一个类的关系D.提高程序的运行效率2.3当保护继承时,基类的()在派生类中成为保护成员,不能通过派生类的对象来直接访问。
A.任何成员B.公有成员和保护成员C.公有成员和私有成员D.私有成员2.4在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是()。
A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针2.5有如下类定义:class MyBASE{int k;public:void set(int n) {k=n;}int get( ) const {return k;}};class MyDERIVED: protected MyBASE{protected;int j;public:void set(int m,int n){MyBASE::set(m);j=n;}int get( ) const{return MyBASE::get( )+j;}};则类MyDERIVED中保护成员个数是(B)。
选择题(继承和派生)
继承和派生一、选择题1. 在C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。
A、复用B、继承C、单继承D、多继承答案:B2. 继承具有(),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
A、规律性B、传递性C、重复性D、多样性答案:B3. 对于虚函数的调用()A、一定使用动态联编B、一定使用静态联编C、必须使用动态联编D、不一定使用动态联编解析:虚函数只是实现动态联编的必要条件之一,只有在同时满足下面条件时,对虚函数的调用才是动态联编:动态联编调用才是动态联编:(1)类之间为基类和派生类关系(2)要有虚函数(1)类之间为基类和派生类关系(2)要有虚函数(3)调用虚函数操作的是对象的指针或者对象引用,或者是由成员函数调用虚函数。
如果不能同时满足以上条件,对虚函数的调用将采取静态联编。
4.下列描述中,()是抽象类的特征。
A、可以说明虚函数B、可以定义友元函数C、可以进行构造函数重载D、不能说明其对象解析:带有纯虚函数的类称为抽象类。
抽象类中的纯虚函数没有具体的定义,所以不能说明抽象类的对象。
这也是抽象类的特性。
答案:D5. 在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。
A、完全相同B、完全不同C、部分相同,部分不同D、以上都不对答案:A6. 实现运行时的多态性要使用()A、构造函数B、析构函数C、重载函数D、虚函数解析:动态联编一直要到程序运行时才能确定调用哪个函数。
虚函数是实现动态联编的必要条件之一,没有虚函数一定不能实现动态联编。
答案:D7. 派生类的对象对它的基类成员中()中可以访问的。
A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员解析:派生类的对象只能访问公有成员,而基类中的公有成员在公有继承方式下成为派生类的公有成员。
8. 派生类的构造函数的成员初始化列表中,不能包含()。
C++面向对象程序设计习题继承与派生
C++面向对象程序设计习题继承与派生继承与派生练习题1.什么是继承性?为什么说它是面向对象程序中的重要机制?所谓继承,就是从先辈处得到属性和行为特征。
2.C++中继承分为哪两个类?继承方式又分哪三种?基类和派生类public(公有)、private(私有)和protected(保护)继承3.三中继承方式中有哪些特点?不同基础更方式中派生类的对象对基类成员的访问有何不同?(1) 公有继承(public)方式:基类中的公有成员和保护成员在派生类中仍然是公有成员和保护成员,而基类的私有成员在派生类中不可访问。
(2) 保护继承(protected)方式:基类中的公有成员和保护成员在派生类中都变成保护成员,而基类的私有成员在派生类中不可访问。
(3) 私有继承(private)方式:基类中的公有成员和保护成员在派生类中都变成私有成员,而基类的私有成员在派生类中不可访问。
因此,无论哪种继承方式,基类中的私有成员在派生类中都不允许访问,基类中的公有成员和保护成员都可以被派生类中的成员直接访问。
派生类对象对基类成员的访问1. 保护继承在类定义中,在关键字protected下说明的成员称为保护成员。
保护成员既具有私有的特性又具有公有的特性。
2. 公有继承在公有继承方式下,基类中的公有成员和保护成员在派生类中仍然是公有成员和保护成员,因此,派生类的其它成员可以直接访问它们,但通过派生类的对象只能访问基类的公有成员,不能访问基类的保护成员和私有成员。
3. 私有继承在私有继承方式下,基类中的公有成员和保护成员在派生类中都变成私有成员,因此,派生类的其它成员可以直接访问它们,但通过派生类的对象不能访问基类的任何成员。
4.如何定义单继承的派生类?如何定义多继承的派生类?一个派生类只有一个直接基类,则该继承称为单一继承一个派生类有多个直接基类,则该继承称为多重继承5.派生类与基类之间有什么关系?在面向对象程序设计中,继承就是一个新类可以从现有类获得特征,从现有类产生新类的过程就是类的派生。
第3章-继承和派生习题
《面向对象程序设计》习题班级:__________ 学号: ________ 姓名: _________ 名单序号:_______ 成绩:________第3章继承与派生一、选择题(共28分,每题1分)1 •下列对派生类的描述中,()是错误的。
A • 一个派生类可以作为另一个派生类的基类B •派生类至少有一个基类C •派生类的成员除了它自己的成员外,还包含了它的基类成员D •派生类中继承的基类成员的访问权限到派生类保持不变2•派生类的对象对它的哪一类基类成员是可以访问的?()A •公有继承的基类的公有成员 B.公有继承的基类的保护成员C.公有继承的基类的私有成员D.保护继承的基类的公有成员3 •关于多继承二义性的描述,()是错误的。
A •派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B •一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C •解决二义性最常用的方法是作用域运算符对成员进行限定D •派生类和它的基类中出现同名函数时,将可能出现二义性4 •多继承派生类构造函数构造对象时,()被最先调用。
A •派生类自己的构造函数B•虚基类的构造函数C•非虚基类的构造函数 D •派生类中子对象类的构造函数5 • C++类体系中,能被派生类继承的是()。
A. 构造函数B.虚函数C •析构函数 D •友元函数6 •设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员()A. 私有继承B.保护继承C.公有继承D.私有、保护、公有均可7 • C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A. 复用B.继承C.封装D.引用&继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
C++面向对象程序设计习题 继承与派生
继承与派生练习题1.什么是继承性?为什么说它是面向对象程序中的重要机制?2.C++中继承分为哪两个类?继承方式又分哪三种?3.三中继承方式中有哪些特点?不同基础更方式中派生类的对象对基类成员的访问有何不同?4.如何定义单继承的派生类?如何定义多继承的派生类?5.派生类与基类之间有什么关系?6.单继承中,派生类的构造函数定义格式如何?7.多继承中,派生类的构造函数定义格式如何?8.多继承中,在哪些情况下会出现二义性?如何消除二义性?9.为什么要引入虚基类?带有虚基类的派生类的构造函数有什么特点?作业题一、选择填空1.下列对派生类的描述中,(D )是错的。
A.一个派生类可以作另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中(A )是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员。
3.派生类的构造函数的成员初始化列表中,不能包含(D )。
A.基类的构造函数;B.派生类中对象成员的初始化;C.基类的对象成员的初始化;D.派生类中一般数据成员的初始化。
4.关于多继承二义性的描述中,(C)是错的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;B.解决二义性的最常用的方法是对成员名的限定义;C.基类和派生类中同时出现的同名函数,也存在二义性问题;(调用时才会出现二义性)D.一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。
7.设置虚基类的目的是(B )A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码。
8.带有虚基类的多层派生类构造函数的成员初始化列表中虚基类的构造函数将被初始化(D)A.类下面的派生类个数有关;B.二次;C.二次;D.一次。
【习题】继承与派生
【习题】继承与派生继承与派生【实验目的】: 1. 掌握派生类的使用方法。
2. 掌握派生类的构造函数和析构函数。
【实验内容】: 1. 定义一个哺乳动物Mammal类,再此派生出狗Dog类,定义一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。
2. 编写一个求出租车收费的程序,输入起始站、终止站和路程,计费公式是起价8元,其中含3公里费用,以后每半公里收费元。
3. 设计一个基类Base,包括编号、姓名、住址以及相关的成员函数,它派生出学生类Student和教师类Teacher,并用一些数据进行测试。
4. 定义一个rectangle类,它包含两个数据成员length 和width;以及包含用于求长方形面积的成员函数。
再定义rectangle的派生类cuboid,它包含一个新数据成员height和用来求长方体体积的成员函数。
在主函数中,使用2个类,求某个长方形的面积和某个长方体的体积。
5. 声明一个Object类,有数据成员weight和相应的操作函数,此派生出的Box类,增加数据成员height和weight及相应的操作函数,声明一个Box 对象,观察构造函数和析构函数的调用顺序。
6. 圆和三角形都需要输入三个数据,设计一个类Object管理这三个数据,从此类派生出圆类Circle 和三角形类Triangle,并求各自的面积。
7. 设计一个建筑物基类Buinding,它派生出宿舍类Hostel和教学楼Classroom,前者包括楼名、总层数、住户数、总住人数和总面积,后者包括楼名、总层数、教室数、灭火器数和总面积。
8. 派生类构造函数执行的次序是怎样的?先构造父类,再构造派生类,析构时先析构派生类,再析构父类。
9. 比较类的三种继承方式public公有继承、protected保护继承、private私有继承之间的差别。
公有继承:派生类函数可调用父类公有成员,父类在派生类中公有私有保护性质不变。
第3章继承和派生习题
A.派生类自己的构造函数B.虚基类的构造函数
C.非虚基类的构造函数D.派生类中子对象类的构造函数
5.C++类体系中,能被派生类继承的是( )。
A.构造函数B.虚函数C.析构函数D.友元函数
6.设有基类定义:
class Cbase
{ private:inta;
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码
25.下列虚基类的声明中,正确的是()。
A.classvirtual B:public AB.virtual classB:publicA
C.class B:publicAvirtualD.class B:virtual public A
26.若要用派生类的对象访问基类的保护成员,以下观点正确的是()
第3章-继承和派生习题
———————————————————————————————— 作者:
———————————————————————————————— 日期:
《面向对象程序设计》习题
班级:学号:姓名:名单序号:成绩:
第3章继承与派生
一、选择题(共28分,每题1分)
1.下列对派生类的描述中,()是错误的。
19.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用
20.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性
21.下列对继承的描述中,错误的是()。
3.关于多继承二义性的描述,()是错误的。
第3章-继承和派生习题
《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第3章继承与派生一、选择题(共28分,每题1分)1.下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变2.派生类的对象对它的哪一类基类成员是可以访问的?()A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员3.关于多继承二义性的描述,()是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限定D.派生类和它的基类中出现同名函数时,将可能出现二义性4.多继承派生类构造函数构造对象时,()被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数D.派生类中子对象类的构造函数5.C++类体系中,能被派生类继承的是()。
A.构造函数B.虚函数C.析构函数D.友元函数6.设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用8.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性9.下列对基类和派生类关系的描述中,错误的是()。
继承和派生习题
继承和派生习题一、单选题1.若类A和类B的定义如下:class A{int i,j;public:int geti(){return i;}};class B: public A{int k;public:void make(){k=i*j;}};则上述中,()是非法的表达式。
A.k=i*j B.int k; C.return i; D.void make();2.关于公有继承,下列说法错误的是()。
A.基类的公有成员和保护成员被继承后作为派生类的公有成员和保护成员。
B.派生类的其他成员可以直接访问基类的公有成员和保护成员。
C.派生类的对象可以访问基类的私有成员。
D.派生类成员和对象都无法访问基类的私有成员。
3.下列说法中错误的是()。
A.公有继承时基类中的public成员在派生类中仍是public的;B.公有继承时基类中的private成员在派生类中仍是private的;C.私有继承时基类中的public成员在派生类中是private的;D.保护继承时基类中的public成员在派生类中是protected的;4.在公有继承中,基类中的公有成员作为派生类的()。
A.公有成员B.私有成员C.保护成员D.私有成员函数5.基类中的()不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。
A.公有成员B.私有成员C.保护成员D.私有成员函数6.在下面的表达式中,不表示虚继承的是()。
A.virtual publicB.public virtualC.publicD.virtual7.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码8.下面叙述错误的是()。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问9.派生类的对象对它的基类成员中()是可以访问的。
c++继承与派生习题
};
class B {public:B( ) {cout<<”B”;} };
class C: public A{
B b;
public:
C( ) {cout<<”C”;}
};
int main( ) {C obj; return 0;}
执行后的输出结果是(
)。
A.CBA
B.Bቤተ መጻሕፍቲ ባይዱC
C.ACB
D.ABC
3.8 类 O 定义了私有函数 F1。P 和 Q 为 O 的派生类,定义为 class P: protected O{…}; class
3.10 有如下程序:
#include<iostream>
using namespace std;
class Base{
private:
void fun1( ) const {cout<<”fun1”;}
protected:
void fun2( ) const {cout<<”fun2”;}
public:
int get( ) const{return MyBASE::get( )+j;}
};
则类 MyDERIVED 中保护成员个数是( )。
A.4
B.3
C.2
D.1
3.7 程序如下:
#include<iostream>
using namespace std;
class A {
public:
A( ) {cout<<”A”;}
C.是一个类的成员函数与另一个类的关系
D.提高程序的运行效率
3.3 当保护继承时,基类的(
(继承与派生)练习题目
继承与派生一.实验目的(1)理解单继承和多继承的相关概念;(2)掌握派生类的定义格式,以及构造函数和析构函数的定义与调用;(3)理解虚基类的作用,掌握虚基类的定义与使用。
二.实验内容及要求(1)定义点类Point,定义圆Circle继承Point,显示圆点和半径的信息,并计算圆的周长与面积;定义圆柱体类Cylinder继承Circle,显示圆柱体的信息,计算圆柱体的表面积和体积。
(2)设计一个学生、教师以及干部管理程序。
定义基类Person,定义教师类Teacher和干部类Cadre继承Person,其中,Person类包含数据成员姓名、性别、出生日期、地址等(出生日期可通过定义日期类来实现);Teacher新增数据成员职称、教研室;Cadre类新增数据成员职务;再定义干部教师类Teacher_Cadre继承Teacher和Cadre;以上类中提供构造函数,输入和输出信息等函数。
(3)设计人员基类Person。
其成员包括:数据成员:姓名(字符数组)、性别(字符数组)和年龄(整型)成员函数:SetPerson,设置人员数据函数;DisplayPerson,显示人员数据函数;设计派生类1:Teacher,派生于Person。
新增成员包括:数据成员:职称(字符数组)、教研室(字符数组)和所授课程(字符数组)成员函数:SetTeacher,设置数据成员函数;DisplayTeacher,显示数据成员函数;设计派生类2:Student,派生于Person。
新增成员包括:数据成员:专业(字符数组)、班级(字符数组)和类别(int)其中类别取值:1(本科生)、2(硕士生)、3(博士生)成员函数:SetStudent,设置数据成员函数;DisplayStudent,显示数据成员函数;设计派生类3:PostDoctor(博士后),多重继承于Student与Teacher。
新增成员包括:数据成员:无成员函数:SetPostDoctor,设置数据成员函数;DisplayPostDoctor,显示数据成员函数;主函数:输入并输出一个教师、一个本科生、一个博士后数据。
继承和派生复习
继承和派生练习一、选择题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++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第3章继承与派生一、选择题(共28分,每题1分)1.下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变2.派生类的对象对它的哪一类基类成员是可以访问的?()A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员3.关于多继承二义性的描述,()是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限定D.派生类和它的基类中出现同名函数时,将可能出现二义性4.多继承派生类构造函数构造对象时,()被最先调用。
A.派生类自己的构造函数B.虚基类的构造函数C.非虚基类的构造函数D.派生类中子对象类的构造函数5.C++类体系中,能被派生类继承的是()。
A.构造函数B.虚函数C.析构函数D.友元函数6.设有基类定义:class Cbase{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量b成为自己的私有成员( )A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可7.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用8.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性9.下列对基类和派生类关系的描述中,错误的是()。
A.派生类是基类的具体化B.派生类是基类的子集C.派生类是基类定义的延续D.派生类是基类的组合10.下列对派生类的描述中,错误的是()。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是privateD.派生类只含有基类的公有成员和保护成员11.下列对继承的描述中,错误的是()。
A.析构函数不能被继承B.派生类也是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变12.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员13.下列说法错误的是()。
A.公有继承的基类中的public成员在派生类中仍是public的B.公有继承的基类中的private成员在派生类中仍是private的C.私有继承的基类中的public成员在派生类中变成private的D.保护继承的基类中的public成员在派生类中变成protected的14.下面叙述错误的是( A )。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D. D. 基类的protected成员不能被派生类的对象访问15.C++类体系中,不能被派生类继承的有()。
A.构造函数B.虚函数C.静态成员函数D.赋值操作函数16.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码17.下列虚基类的声明中,正确的是()。
A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B: virtual public A18.在下面的表达式中,不表示虚继承的是()。
A.virtual publicB.public virtualC.publicD. virtual19.C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用20.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A.规律性B.传递性C.重复性D.多样性21.下列对继承的描述中,错误的是()。
A.析构函数不能被继承B.派生类也是基类的组合C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类保持不变22.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员23.下面叙述错误的是( A )。
A.基类的protected成员在派生类中仍然是protectedB.基类的protected成员在public派生类中仍然是protected的C.基类的protected成员在private派生类中是private的D.基类的protected成员不能被派生类的对象访问24.设置虚函数的声明中,正确的是()。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码25.下列虚基类的声明中,正确的是()。
A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B: virtual public A26.若要用派生类的对象访问基类的保护成员,以下观点正确的是( )A.不可能实现B.可采用保护继承C.可采用私有继承D.可采用公有继承27.设有基类定义:class base{ private: int a;protected: int b;public: int c;};派生类采用何种继承方式可以使成员变量c能被派生类的对象访问( )A. 私有继承B.保护继承C. 公有继承D.私有、保护、公有均可28.下列虚基类的声明中,正确的是()。
A.class virtual B:public A B.virtual class B:public AC.class B:public A virtual D.class B: virtual public A二、填空题(共23分,每空1分)1.C++将类继承分为和两种。
2.派生类可以定义其_______________中不具备的数据和操作。
3.派生类构造函数的初始化列表中包含____________________________。
4.在继承机制下,当对象消亡时,编译系统先执行(1)的析构函数,然后才执行(2)的析构函数,最后执行(3)的析构函数。
5.设有以下类的定义:class Aclass B: protected Aclass C: private B{int A1;{ int b1;{ int c1;protected:int A2;protected: int b2;protected: int c2;public:int A3;public: int b3;public: int c3;};};};请按访问权限写出派生类C中具有的成员。
私有成员:(1)保护成员:(2)公有成员:(3)。
6.生成一个派生类对象时,先调用(1)的构造函数,然后调用(2)的构造函数。
7.继承发生在利用现有类派生新类时,其中(1)称为基类,或(2)类;(3)称为派生类,或(4)类。
8.在继承关系中,(1)称为多重继承,(2)称为多层继承。
9.在公有继承关系下,派生类的对象可以访问基类中的(1)成员,派生类的成员函数可以访问基类中的(2)成员。
10.在保护继承关系下,基类的公有成员和保护成员将成为派生类中的(1)成员,它们只能由派生类的(2)来访问;基类的私有成员将成为派生类中的(3)成员。
三、改错题(共6分,每题3分)1.指出并改正下面程序中的错误。
#include<iostream.h>class Point{ intx,y;public:Point(int a=0,int b=0) {x=a; y=b;}void move(intxoffset,intyoffset) {x+=xoffset; y+=yoffset;}intgetx() {return x;}intgety() {return y;}};class Rectangle:protected Point{ intlength,width;public:Rectangle(intx,inty,intl,int w):Point(x,y){ length=l;width=w;}intgetlength(){return length;}intgetwidth(){return width;}};void main(){ Rectangle r(0,0,8,4);r.move(23,56);cout<<r.getx()<<","<<r.gety()<<","<<r.getlength()<<","<<r.getwidth()<<endl;}2.#include<iostream.h>class A{ public:int x;A(int a=0) {x=a;}void display() { cout<<"A.x="<<x<<endl; }};class B{ public:int x;B(int a=0) {x=a;}void display() {cout<<"B.x="<<x<<endl; }};class C:public A,public B{ int y;C(inta,intb,int c) :A(a),B(b){ y=c; }intgety() { return y; }};void main(){ C myc(1,2,3);myc.x=10;myc.display();}四、看程序写结果(共16分,每题4分)1.#include <iostream.h>class Base{ int i;public:Base(int n){cout<<"Constucting base class" <<endl;i=n;}~Base(){cout<<"Destructing base class" <<endl;}void showi(){cout<< i<< ",";}intGeti(){return i;}};class Derived:public Base{ int j;Base aa;public:Derived(intn,intm,int p):Base(m),aa(p){cout<< "Constructing derived class" <<endl;j=n;}~Derived(){cout<<"Destructing derived class"<<endl;}void show(){Base::showi();cout<< j<<"," <<aa.Geti() <<endl;}};void main(){ Derived obj(8,13,24);obj.show();}2.#include<iostream.h>class A{ public:A(char *s) { cout<<s<<endl; }~A() {}};class B:virtual public A{ public:B(char *s1, char *s2):A(s1){ cout<<s2<<endl; }};class C: virtual public A{public:C(char*s1,char *s2):A(s1){cout<<s2<<endl;};class D:public B,public C{public:D(char *s1, char *s2,char *s3, char *s4):B(s1,s2),C(s1,s3),A(s1){cout<<s4<<endl;}};void main(){D *p=new D("class A","classB","classC","class D");delete p;}3.#include<iostream.h>class parent{ int i;protected:int x;public:parent( ) {x=0; i=0;}void change( ) {x++; i++; }void display();};class son: public parent{ public:void modify();};void parent:: display(){cout<<"x="<<x<<endl; }void son::modify(){x++; }void main(){son A; parent B;cout<<"Display derived class object A:\n";A.display();A.change();A.display();A.modify();A.display();cout<<"Display base class object B:\n";B.change(); B.display();}4.#include<iostream.h>class base{ public:void show() {cout<<"class base show() is called.\n"; }};class derived: public base{ public:void show() {cout<<"class derived show() is called.\n"; }};void main(){base demo1;derived demo2;demo1.show();demo2.show();demo2.base::show();}五、编程题(共27分,每题9分)1.建立一个基类Building ,用来存储一座楼房的层数、房间数以及它的总平方英尺数。