C++派生类练习题
国家二级C++机试(继承和派生)模拟试卷8(题后含答案及解析)

国家二级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 的构造函数的定义中,正确的是( )。
C++程序设计与应用基础第四章继承与派生习题答案

第四章继承与派生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__标识虚基类。
C 第八章继承与派生习题习题解答

第八章继承与多态习题一.基本概念与基础知识自测题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继承与派生习题答案

1.4多继承时,多个基类中的同名的成员在派生类中由于标识符不唯一而出现—二
义性一。在派生类中采用_虚基类_或_作用域分辨符一来消除该问题。
3.选择题
3.1下面对派生类的描述中,错误的是(D)。
};
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.1在C++中,三种派生方式的说明符号为_public_、_private.、protected不加 说明,则默认的派生方式为private.。
1.2当公有派生时,基类的公有成员成为派生类的公有成员保护成员成为派
生类的_保护成员;私有成员成为派生类的—不能直接访问成员_。当保护派生时, 基类的公有成员成为派生类的—保护成员;保护成员成为派生类的—保护成员 私有成员成为派生类的—不能直接访问成员_。
A.—个派生类可以作为另外一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员
D.派生类中继承的基类成员的访问权限到派生类中保持不变
3.2下列对友元关系叙述正确的是(A)。
A.不能继承
B.是类与类的关系
C.是一个类的成员函数与另一个类的关系
C++(练习)第8章,继承与派生

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-继承和派生

习题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章类和对象类的继承与派生复习题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];”语句时,自动调用该类构造函数的次数为()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
class base1
{
public:
base1(){cout<<"this is base1 class!"<<endl;}
};
class level1:public base1,virtual public base
{
public:
level1(){cout<<"this is level1 class!"<<endl;}
{
b=j;
cout<<"B's constructor called.\n";
}
void B::print()
{
A::print();
cout<<b<<endl;
}
void main()
{
B bb1;
B bb2(1,2,3);
bb1.print();
bb2.print();
}
4.下面标出的函数及语句中,正确的为。
{ cout<<s2<<" "<<"C's con."<<endl;}
};class D:public B,puห้องสมุดไป่ตู้lic C
{ public:
D(const char *s1,const char *s2,const char *s3,const char *s4):B(s4,s2),C(s2,s3),A(s1)
~N(){cout<<"destructor N."<<endl;}
private:
int n;
M1 mm1;
M2 mm2;
};
void main()
{
N nn(1,2,3,4);
nn.print();
}
2.
#include“iostream.h”
class A
{
public:
A(int i){ a=i;cout<<"con.A\n";}
B.调用基类构造函数,然后调用成员对象的构造函数,再执行派生类的构造函数体中的内容
C.调用基类构造函数,然后调用派生类的构造函数,再执行派生类的构造函数体中的内容
D.调用基类构造函数,然后调用基类成员对象的构造函数,再执行派生类的构造函数体中的内容
二.分析程序的执行结果,并上机验证
1.
#include“iostream.h”
void print1()
{cout<<"virtual class"<<endl; }
void print2()
{cout<<a<<endl;}
~A(){cout<<"des. A\n";}
private:
int a;
};
class B1:virtual public A
{
public:
B1(int i,int j):A(i) {b1=j;cout<<"con.B1\n";}
~A() {}};
class B:virtual public A
{public:
B(const char *s1,const char *s2):A(s1)
{ cout<<s2<<" "<<"B's con."<<endl;}
};
class C: virtual public A
{
public:
C(const char *s1,const char *s2):A(s1)
{ cout<<s4<<" "<<"D's con."<<endl; }
};
void main()
{
D *ptr=new D("class A", "class B", "class C", "class D");
delete ptr;
}
二.编程题
已知有一类circle如下:
#include"iostream.h"
{
public:
N(int i,int j,int k,int l):M1(i),M2(j),mm1(k),mm2(l)
{n=3;cout<<"constructor N."<<l<<endl;}
void print()
{M1::print();M2::print();cout<<n<<endl;}
l=3.14f*r*r*r*4/3;
return l;
}
};
void main()
{Circle c(5),*p;
Ball b(5);
p=&c;
p->display();
p->display();
}
8.#include <iostream.h>
class A
{public:
A(const char *s) { cout<<s<<" "<<"A's con."<<endl ;}
{
public:
toplevel(){cout<<"this is toplevel class!"<<endl;}
};
void main()
{
toplevel topobj;
}
6.
#include"iostream.h"
class A
{public:
A(int i){cout<<"constructor A"<<i<<endl;}
}
7.下面的程序是用派生类技术计算出半径为5的圆的面积和球的体积并在屏幕上输出。
请选择填空,完成程序。
#include "iostream.h"
class Circle
{protected:
float r;
public:
Circle(float i):r(i){}
virtual float value()
{public:
M2(int i){m2=i;cout<<"constructor M2."<<i<<endl;}
void print(){cout<<m2<<endl;}
~M2(){cout<<"destructor M2."<<endl;}
private:
int m2;
};
class N:public M1,public M2
{float l;
l=3.14f*r*r;
return l;
}
void display()
{cout<<value()<<endl;}
};
class Ball:public Circle
{public:
Ball(float i):Circle(i){}
virtual float value()
{float l;
{public:
B(){b=0,cout<<"B's default constructor called.\n";}
B(int i,int j,int k);
~B(){cout<<"B's destructor called.\n";}
void print();
private:
int b;
};
B::B(int i,int j,int k):A(i)
protected:
intpro2;
private:
int pri2;
};
class C: public B
{
public:
void pub3(){cout<<pri2<<endl;}//------------(B)
};
class D:privateC
{
public:
void pub4();
};
void main()
c1.print( );
c1.A::print1();
B1b1(6,7);
B2 b2(8,9);
b1.A::print2();
b2.print();
}
3.
#include"iostream.h"
class A
{public:
A(){a=0;cout<<"A's default constructor called.\n";}
class M1
{public:
M1(int i){m1=i;cout<<"constructor M1."<<i<<endl;}
void print(){cout<<m1<<endl;}