C++派生类练习题
- 格式:doc
- 大小:57.00 KB
- 文档页数:7
国家二级C++机试(继承和派生)模拟试卷8(题后含答案及解析) 题型有:1. 选择题选择题1.有如下类定义:class AA{ int a:public:AA(intn=0):a(n){} };class BB:public AA{ public:BB(int n)____ };其中横线处缺失部分是( )。
A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;}正确答案:B解析:根据派生类构造函数的一般格式:<派生类名>(<总参数表>):<基类名1>(<参数表1>),…<基类名n><参数表n>),<成员对象名1>(<参数表n+1>),<成员对象名m>(<参数表n+m>)<派生类构造函数体>。
在派生类BB的构造函数总参数表后面应该接上基类名AA和其参数。
知识模块:继承和派生2.有如下程序:#inc1ude <iostream>using namespace std;class Basel{ public:Basel(int d) {cout<<d;} ~Basel( ){} };class Base2{ public:Base2(int d) {cout<<d;} ~Base2( ){} };class Derived:public Basel,Base2{ public:Derived (int a,int b,int c,int d);Basel(b),Base2(a),bl(d),b2(c) {} Private:int b1;int b2;};int main( ){ Derived d(1,2,3,4);retum 0;} 运行时的输出结果是( )。
A.1234B.2134C.12D.21正确答案:D解析:程序在创建派生类对象d时,分别调用基类Basel和Basel的构造函数。
知识模块:继承和派生3.已知基类Employee只有一个构造函数,其定义如下:Employee::Employee(int n):id(n){} Manager是Employee的派生类,则下列对Manager 的构造函数的定义中,正确的是( )。
第四章继承与派生1、填空题1)在派生类中使用基类的成员,可以显示地使用___成员名限定符__来使用基类成员。
2)垂直访问时,保护成员的访问控制权限与____公有_____成员相同3)指向基类的对象的指针变量也可以指向___派生类____的对象。
4)若类Y是类X的私有派生类,类Z是类Y的派生类,则类Z__不能___访问类X的保护成员与公有成员。
5)在划线处填上适当的语句,完成下列程序。
#include <math.h>class Point{public:point(double a,double b,double c){___X=a;Y=b;Z=c;___}double Getx(){return X;}double Gety(){return Y;}double Getz(){return Z;}private:______double X;______protected:_____double Y,Z;_____};class Line :_____public______Point{public:Line(double a ,double b,double c,double d)_____:point(a,b,c)__{_ k=d;_ }void show(){cout<<Getx()<<endl;cout<<Gety()<<““<<.<<<endl;cout<<Getz()<<““<<Z<<endl;cout<<K<<endl;}private:double k;};void main(){Line obj(1.2,3.4,5.6,7.8);obj.show();}6)设置虚基类的目的是__解决二义性问题___,可通过___关键字virtual__标识虚基类。
第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。
(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。
如果强制转换则要注意(6)。
答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。
公有派生可以使其类的(4),所以公有派生是主流。
答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。
继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。
答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.6 C++中多态性包括两种多态性:(1)和(2)。
前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。
答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.2简答题(以下习题题号可能和教材不一致!)8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。
派生类构造函数各部分的执行次序是:1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。
2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。
3.派生类的构造函数体中的操作。
8.2.2什么叫派生类的同名覆盖(override)?答:如果派生类声明了一个和某个基类成员同名的新成员(当然如是成员函数,参数表也必须一样,否则是重载),派生类中的新成员就屏蔽了基类同名成员,类似函数中的局部变量屏蔽全局变量。
C++(练习)第8章,继承与派生一,单选题1.下列描述中错误的是( )。
A 继承分为多重继承和单继承B 对象间通信靠传递消息实现C 在外面看不到对象的内部特征是基于对象的"模块独立性好"这个特征D 类是具有共同属性、共同方法的对象的集合参考答案C2. 设有以下定义:#includeclass A1{public:void show1() { cout<<"class A1"<<="">};class A2: public A1{public:void show2( ) { cout<<"class A2"<<="">};class A3: protected A2{public:void show3( ) { cout<<"class A3"<<="">};void main(){A1 obj1;A2 obj2;A3 obj3;...}以下不合法的调用语句是( )。
A obj1.show1();B obj2.show1();C obj3.show1();D obj2.show2();参考答案C3. 下列描述中哪个是正确的__________。
A 私有派生的子类无法访问父类的成员B 类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,因为类A的成员对类C是不可访问的C 私有派生类不能作为基类派生子类D 私有派生类的所有子孙类将无法继续继承该类的成员参考答案B4. 下面有关派生类的说法中,错误的是( )。
A 一个派生类可以作为另一个派生类的基类B 一个派生类可以有多个基类C 派生类构造函数可以将初始化参数值传递给基类的构造函数和对象成员的构造函数D 具有继承关系时,基类成员在派生类中的访问权限不变参考答案D5. 设置虚基类的目的是( )。
继承与派生习题C++讲义-第九章习题一.选择题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.关于多继承二义性的描述中,错误的是()A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性。
B.解决二义性的常用方法是对成员名进行类名限定。
C.基类和派生类中同时出现的同名函数,也存在二义性问题。
D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。
7.设置虚基类的目的是()A.简化程序 B.消除二义性C.提高运行效率 D.减少目标代码8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化的次数为()A.与虚基类下面的派生类个数有关。
B.多次第 1 页共 15 页C.二次 D.一次9.C++中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。
习题9 继承和派生一、单项选择题1、C++语言建立类族是通过()实现的。
A、类的嵌套B、虚函数C、类的继承D、抽象类2、继承具有(),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
A、规律性B、传递性C、重复性D、多样性3、下列对基类和派生类关系的描述中,错误的是()。
A、派生类是基类的具体化B、派生类是基类的子集C、派生类是基类定义的延续D、派生类是基类的组合4、下列对派生类的描述中,错误的是()。
A、一个派生类可以作为另一个派生类的基类B、派生类至少有一个基类C、派生类的缺省继承方式是privateD、派生类只继承了基类的公有成员和保护成员5、下列关于继承的描述中,错误的是()。
A、析构函数不能被继承B、派生类是基类的组合C、派生类的成员除了它自己的成员外,还包含了它的基类的成员D、派生类中继承的基类成员的访问权限到派生类保持不变6、派生类的对象对它的基类成员中()是可以访问的。
A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员7、下列说法中错误的是()。
A、公有继承时基类中的public成员在派生类中仍是public的B、公有继承时基类中的private成员在派生类中仍是private的C、私有继承时基类中的public成员在派生类中是private的D、保护继承时基类中的public成员在派生类中是protected的8、下面叙述错误的是()。
A、基类的protected成员在派生类中仍然是protected的B、基类的protected成员在public派生类中仍然是protected的C、基类的protected成员在private派生类中是private的D、基类的protected成员不能被派生类的对象访问9、下面叙述错误的是()。
A、对基类成员的访问能力在private派生类中和public派生类中是相同的B、基类的private成员在public派生类中不可访问C、基类中的public成员在protected派生类中是protected的D、基类中的public成员在protected派生类中仍然是public的10、C++体系中,不能被派生类继承的有()。
C++第2 3章类和对象类的继承与派生复习题c++第2-3章类和对象、类的继承与派生复习题第2章类和对象一、选择题1、()不是构造函数的特征。
a、构造函数的函数名与类名相同;b、构造函数可以空载;c、构造函数可以设置缺省参数;d、构造函数必须指定类型说明。
2、下列关于构造函数的描述中,()是正确的。
a、构造函数可以设置缺省参数;b、构造函数可以被承继;c、构造函数可以对静态数据成员进行初始化;d、构造函数可以说明为虚函数;3、()是析构函数的特征。
a、析二重函数可以存有一个或多个参数;b、析二重函数名与类名相同;c、析构函数的定义只能在类体内;d、一个类中只能定义一个析构函数;4、定义析构函数时,应该注意()。
a、其函数名与类名完全相同;b、函数回到类型就是void类型;c、无形参,也不容空载;d、函数体中必须有delete语句;5、下列静态数据成员的特性中,()是错误的。
a、说明静态数据成员时前边要加修饰符static;b、静态数据成员要在类体外进行初始化;c、静态数据成员不是所有对象所共用的;d、提及静态数据成员时,必须在其名称ka和作用域运算符;6、友元的促进作用就是()。
a、提升程序的运用效率;b、强化类的PCB性;c、同时实现数据的暗藏性;d、减少成员函数的种类;7、关于成员函数特征的下列描述中,()是错误的。
a、成员函数一定是内联函数;b、成员函数可以重载;c、成员函数可以设置缺省参数值;d、成员函数可以就是静态的;8、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,(a、voidprint()const;b、constvoidprint();c、voidconstprint();d、voidprint(const);)就是恰当的;9、在()情况下适合使用inline定义内联函数。
a、函数体含有循环语句;b、函数体含有递归语句;c、函数代码小,频繁调用;d、函数代码多,不常调用;10、假设ab为一个类,则继续执行“aba(4),b[3],*p[2];”语句时,自动调用该类构造函数的次数为()。
第九章继承与派生类9.2 典型例题解析与解答例题 1:以下对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类最少有一个基类C.派生类的成员除了它自己的成员外,还包括了它的基类成员D.派生类中继承的基类成员的接见权限到派生类保持不变答案: D解析:一个派生类可以作为另一个派生类的基类。
无论是单继承还是多继承,派生类最少有一个基类。
派生类的成员除了它自己的成员外,还包括了它的基类成员。
派生类中继承的基类成员的接见权限到派生类受继承方式影响的,关于私有继承,基类的 public , protected 成员在派生类中作为 private 成员;关于公有继承,基类的public , protected 成员在派生类中接见属性不变;关于保护继承,基类的public 、 protected成员在派生类中作为protected成员。
例题 2:派生类的对象对它的哪一类基类成员是可以接见的?()A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员答案: A解析:公有继承的基类的公有成员在派生类中保持公有接见权限,因此派生类对象可以接见它;公有继承的基类的保护成员在派生类中保持保护接见权限,因此派生类对象不行以接见它;基类的私有成员不可以被派生到派生类中,因此派生类对象不可以接见它;保护继承的基类的公有成员在派生类中变为保护的接见权限,因此派生类对象不行以接见它。
例题 3:关于多继承二义性的描述,()是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员接见可能出现二义性B.一个派生类是从拥有共同的间接基类的两个基类派生来的,派生类对该公共基类的接见可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限制D.派生类和它的基类中出现同名函数时,将可能出现二义性答案: D解析:出现二义性有两种状况:调用不一样基类的同样成员时可能出现二义性;接见共同基类的成员时可能出现二义性。
c 继承与派生练习题C++是一种面向对象的编程语言,其中最重要的概念之一就是继承与派生。
继承允许一个类(称为派生类)从另一个类(称为基类)中继承属性和行为。
这个过程允许我们在派生类中使用基类的成员,同时还可以添加新的成员或者修改基类成员的行为。
在这篇文章中,我们将通过一些练习题来巩固与继承与派生有关的概念和技能。
这些练习题旨在帮助读者更好地理解和应用这些概念。
首先,考虑一下以下的代码段:```cppclass Shape {protected:int width, height;public:Shape(int w, int h) : width(w), height(h) {}virtual int area() = 0;};class Rectangle : public Shape {public:Rectangle(int w, int h) : Shape(w, h) {}int area() override { return width * height; }};class Triangle : public Shape {public:Triangle(int w, int h) : Shape(w, h) {}int area() override { return (width * height) / 2; }};```通过观察上述代码,我们可以看到Shape是一个基类,其派生类有Rectangle和Triangle。
这些派生类通过公有继承的方式继承了Shape类的成员。
另外,注意到Shape类中的区域函数area()被声明为纯虚函数。
接下来,我们通过一些练习题来检验对继承和派生的理解。
练习题1:向Shape的派生类中添加新的成员在给定的代码段中,尝试向Rectangle和Triangle类中添加一个新的成员,例如颜色color。
然后,尝试在main()函数中创建一个Rectangle对象和一个Triangle对象,并打印出它们的属性(包括颜色)和区域。
国家二级C++机试(继承和派生)模拟试卷16(题后含答案及解析) 题型有:1. 选择题选择题1.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为( )。
A.派生类、成员对象类、基类B.成员对象类、基类、派生类C.基类、成员对象类、派生类D.基类、派生类、成员对象类正确答案:C解析:建立派生类对象的时候,构造函数的执行顺序如下:执行基类的构造函数,调用的顺序按照基类被继承时候的顺序(自左向右)。
然后是执行成员对象的构造函数,调用顺序按照各个成员对象在类中的声明顺序(自上而下),最后是执行派生类的构造函数。
知识模块:继承和派生2.有如下类定义和变量定义:c1ass Parents{ public: int publicData; private: int privateData; );c1ass ChildA:public Parents{/*类体略*/}; c1ass ChildB:private Parents{/*类体略*/}; ChildA a;ChildB b;下列语句中正确的是( )。
A.cout<<a.publicData<<end1;B.cout<<a.privateData<<end1;C.cout<<b.publicData<<end1;D.cout<<b.privateData<<end1;正确答案:A解析:基类Parents的私有成员privateData在派生类ChildA和ChildB中是不可以访问,所以选项B、D是错误,而派生类ChildB私有继承基类Parents,所以基类Parents的公有成员publicData在派生类ChildB中变为私有成员,只能在派生类ChildB内部访问,因而选项C是错误的。
派生类ChildA公有继承基类Parents,所以基类Parents的公有成员publicData在派生类ChildA中可以访问。
知识模块:继承和派生3.通过派生类的对象可直接访问其( )。
继承与派生类知识要点1.1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握priv ate,public,protec ted三种继承方式的特点。
继承方式决定了基类中的成员在派生类中的属性。
三种继承方式的共同点:基类的private成员在派生类中不可见。
区别:对于私有继承,基类的public、protec ted成员在派生类中作为private成员;对于公有继承,基类的pub lic、protec ted成员在派生类中访问属性不变;对于保护继承,基类的public、protec ted成员在派生类中作为protecte d成员。
(3)掌握派生类中的构造函数和析构函数的使用。
基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。
派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。
基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。
2.2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.3.掌握虚基类的概念和定义方法。
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
国家二级C++机试(继承和派生)模拟试卷15(总分:52.00,做题时间:90分钟)一、选择题(总题数:26,分数:52.00)1.有如下类声明:c1ass XA{ int x;public: XA(int n){x=n;} };c1ass XB:public XA{ int y;public: XB(int a,:int b); };在构造函数XB的下列定义中,正确的是( )。
(分数:2.00)A.XB::XB(int a,intb):x(a),y(b){}B.XB::XB(inta,int b):XA(a),y(b){} √C.XB::XB(int a,int b):x(a),XB(b){}D.XB::XB(int a,int b):XA(a),XB(b){}解析:解析:此题考查的是派生类中构造函数的定义。
派生类的构造首先要调用基类的构造函数,对基类成员初始化:然后对派生类中的新增成员初始化。
格式为:派生类名(构造函数形参表)基类构造函数(形参表)。
2.有如下程序: #inc1ude<iostrcam> using namespace std; c1ass BASE{ public: ~BASEO {cout<<"BASE";} }; c1ass DERIVED:public BASE{ public: ~DERIVED(){cout<<"DERIVED";} }; int main0 {DERIVED x;return0;} 执行后的输出结果是( )。
(分数:2.00)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE √解析:解析:此题考查的是派生类的定义和使用。
当对象被删除时,派生类的析构函数就被执行。
由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。
执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。
一、选择题1.不论派生类以何种方式继承基类,都不能直接使用基类的。
A) public 成员B) private成员C) protected成员D) 所有成员2.当一个派生类公有继承一个基类时,基类的protected成员和public成员在派生类的访问权限分别是。
A)public和public B)public和protected C)protected和public D)protected和protected 3.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的。
A) public成员B) private成员C) protected成员D) 友员4.当一个派生类保护继承一个基类时,基类中的所有公有成员和保护成员成为派生类的。
A) public成员B) private成员C) protected成员D)友员5.下列有关继承和派生的叙述中,正确的是。
A)如果一个派生类私有继承其基类,则该派生类成员函数不能访问基类的保护成员B)派生类的成员函数可以访问基类的所有成员C)基类对象可以赋值给派生类对象D)派生类对象可以赋值给基类对象6.在创建派生类对象时,构造函数的执行顺序是。
A) 子对象成员构造函数—基类构造函数—派生类本身的构造函数B) 派生类本身的构造函数—基类构造函数—子对象成员构造函数C) 基类构造函数—派生类本身的构造函数—子对象成员构造函数D) 基类构造函数—子对象成员构造函数—派生类本身的构造函数7.在一个派生类对象结束其生命周期时______。
A)先调用派生类的析构函数后调用基类的析构函数B)先调用基类的析构函数后调用派生类的析构函数C)如果基类没有定义析构函数,则只调用派生类的析构函数D)如果派生类没有定义析构函数,则只调用基类的析构函数8.下列关于继承的描述中,错误的是______。
A)如果不显式地指定继承方式,缺省的继承方式是私有(private)B)继承可以实现软件复用C)派生类没有继承基类的私有成员D)派生类构造函数要负责调用基类的构造函数9.设置虚基类的目的是______。