C试题库Word文档格式.docx
《C试题库Word文档格式.docx》由会员分享,可在线阅读,更多相关《C试题库Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
1.4,7
2.while、dowhile、for
3.private
4.对象,析构函数
5.相反的顺序
第二章类和对象
1.C++中的类有两种用法:
一种是类的实例化,即生成类对象,并参与系统的运行;
另一种是通过()派生了新的类。
A.复用B.继承C.封装D.引用
2.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()
A.类B.对象C.函数体D.数据块
3.关于封装,下列说法中不正确的是()。
A.通过封装,对象的全部属性和操作结合在一起,形成一个整体
B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C.通过封装,每个对象都成为相对独立的实体
D.通过封装,对象的属性都是不可见的
4.成员函数必须用( )来调用。
A、对象B、指针C、this指针 D、函数重载
5.在类中说明的成员可以使用关键字()进行修饰。
A、privateB、externC、autoE、register
6.面向对象的程序设计语言必须具备的关键要素是()
A.抽象和封装B.抽象和多态性
C.抽象、封装、继承和多态性D.抽象、封装和继承性
1.类是用户定义的类型,具有类类型的变量称作_______。
2.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。
[参考答案]
1B2A3D4A5A6C
1.对象2.THIS指针
第三章关于类和对象的进一步讨论
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.public
B.private
C.protected
D.friend
7.下列不是描述类的成员函数的是()
A.构造函数B.析构函数
C.友元函数D.拷贝构造函数
1.当建立_______,程序自动调用该类的构造函数。
2.C++的类定义中,有两个特殊的成员函数,其中—个的作用是初始化该类的新对象,这个成员函数称为_______。
3.当对象生命周期结束时调用____。
4.使用友元的关键字为____。
5.析构函数是特殊的____,只能由____调用,并以和构造函数____的顺序调用。
三、名词解释
1.构造函数
2.析构函数
四、应用题
1.什么是构造函数?
构造函数有哪些特点?
什么是析构函数?
它有什么特点?
2.有两个长方柱,其长、宽、高分别为:
(1)12,25,30
(2)15,30,21
编写程序,在类中用带参数的构造函数,计算它们的体积。
1C2C3C4D5D6B7C
1.对象2.构造函数3.析构函数4.friend5.成员函数,系统自动,相反
1.构造函数是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
2.析构函数在对象的生命周期结束时系统自动调用它,释放此对象所属的空间。
构造函数是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
构造函数没有返回值,因此不需要在定义中声明类型。
构造函数不需要显式地调用,构造函数是在建立对象时由系统自动执行的,且每一个对象只执行一次。
构造函数一般定义为public。
析构函数在对象的生命周期结束时系统自动调用它,释放此对象所属的空间。
如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。
析构函数名以~符号开始后跟类名。
2.有两个长方柱,其长、宽、高分别为:
#include<
iostream>
usingnamespacestd;
classBox
{public:
Box(int,int,int);
intvolume();
private:
intheight;
intwidth;
intlength;
};
Box:
:
Box(inth,intw,intlen)
{height=h;
width=w;
length=len;
}
intBox:
volume()
{return(height*width*length);
intmain()
{
Boxbox1(12,25,30);
cout<
<
"
box1体积="
<
box1.volume()<
endl;
Boxbox2(15,30,21);
box2体积="
box2.volume()<
return0;
}
第四章运算符重载
一、名词解释
1.运算符重载
运算符重载与函数重载类似,对已有的运算符赋予新的含义,用一个运算符表示不同功能的运算,就是运算符重载。
第五章继承与派生
1.对基类和派生类的关系描述中,错误的是()
A.派生类是基类的具体化B.基类继承了派生类的属性
C.派生类是基类定义的延续D.派生类是基类的特殊化
2.在公有继承的情况下,基类成员在派生类中的访问权限()
A.受限制B.受保护C.保持不变D.不受保护
3.C++中的类有两种用法:
A.复用B.继承C.封装D.引用
4.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.私有继承的公有成员
5.下列说法错误的是()。
A.公有继承的基类中的public成员在派生类中仍是public的
B.公有继承的基类中的private成员在派生类中仍是private的
C.私有继承的基类中的public成员在派生类中仍是private的
D.保护继承的基类中的public成员在派生类中仍是protected的
6.设置虚基类的声明中,正确的是()。
A.简化程序B.减少目标代码C.提高运行效率D.消除二义性
7.下面叙述错误的是()。
A.
基类的protected成员在派生类中仍然是protected
B.
基类的protected成员在public派生类中仍然是protected的
C.
基类的protected成员在private派生类中是private的
D.
基类的protected成员不能被派生类的对象访问
8.下列虚基类的声明中,正确的是()。
classvirtualB:
publicA
virtualclassB:
classB:
publicAvirtual
virtualpublicA
9.C++类体系中,不能被派生类继承的是()
A.转换函数B.构造函数
C.虚函数D.静态成员函数
1.在公有派生类中基类的公有成员在派生类中__________;
基类的_________成员在派生类中仍然是不可访问的。
2.C++中的类有两种用法:
另一种是通过______派生了新的类。
3.派生类的继承方式有三种:
______、______、______。
4.使用关键字class定义的类中,缺省的访问权限是______的。
1.类的继承
2.类的派生
1.简述虚基类的作用。
1B2C3B4A5B6D7A8D9B
1.公有的,私有2.继承3.公有、私有、保护4私有
1.类的继承:
保持已有类的特性而构造新类的过程称为继承(inheritance)。
2.类的派生:
在已有类的基础上新增加自己的特性而产生新类的过程称为类的派生。
1.虚基类的作用:
当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性问题。
如果不希望在派生类中保留间接共同基类的多个同名成员,C++提供了虚基类的方法,使派生类在继承间接共同基类时只保留一份成员,以此消除二义性问题。
第六章多态性与虚函数
1.下列关于动态联编的描述中,错误的是()。
A.动态联编是以虚函数为基础
B.动态联编是运行时确定所调用的函数代码的
C.动态联编调用函数操作是指向对象的指针或对象引用
D.动态联编是在编译时确定操作函数的
2.关于虚函数的描述中,正确的是()。
A.虚函数是一个静态成员函数
B.虚函数是一个非成员函数
C.虚函数即可以在函数说明时定义,也可以在函数实现时定义
D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
3.下面四个选项中,()是用来声明虚函数的。
A.publicB.virtualC.usingD.false
4.编译时的多态性可以通过使用()获得。
A.虚函数和指针B.重载函数
C.虚函数和对象D.虚函数和引用
5.关于纯虚函数和抽象类的描述中,错误的是()。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具体纯虚函数的类
C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
6.如果一个类至少有一个纯虚函数,那么就称该类为()。
A.抽象类B.虚函数C.派生类D.以上都不对
7.要实现动态联编,必须通过()调用虚函数。
A.对象指针B.成员名限定
C.对象名D.派生类名
8.下面描述中,正确的是()。
A.有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
B.含virtual可以用来声明虚函数
C.即使基类的构造函数没有参数,派生类也必须建立构造函数
D.静态数据成员可以通过成员初始化列表来初始化
9..实现运行时的多态性用()
A.重载函数B.构造函数C.析构函数D.虚函数
1.这种在运行时,能依据其类型确认调用哪个函数的能力,称为_____________。
2.对虚函数使用基类类型的指针或引用调用,系统使用____________多态;
而使用对象调用
系统使用______多态。
3.抽象类是含有______的类。
4.虚函数是用关键字______说明的成员函数。
5.函数重载是一种_____现象,它属于静态多态。
1.什么叫做多态性?
在C++中是如何实现多态的?
多态性是指同样的消息被不同的对象接收时导致的不同行为。
消息是指对类的成员函数的调用;
不同的行为是指不同的实现,也就是调用了不同的函数。
多态性分为两类:
静态多态性和动态多态性。
函数的重载、运算符重载都是静态多态;
动态多态性是通过虚函数实现的。
2.在teacher类和student类之上增加一个共同的基类person,人员的基本数据有name、sex、age;
在teacher类中增加title,student类中增加score;
声明Teacher和Student类为Graduate公用继承的直接基类。
在定义派生类Graduate对象时给出初始化数据,输出这些数据。
3.建立以shape类为抽象基类的类族,先由shape类派生出point类,有数据成员x,y(坐标)。
以point类为基类派生一个圆类,增加数据成员r(半径),再以圆为直接基类派生出一个圆柱体类,再增加数据成员h(高),求出圆的面积,圆柱体的表面积、体积。
1D2D3B4B5C6A7A8B9D
1.动态多态2.动态、静态3.纯虚函数4virtual5多态
1.抽象类:
有纯虚函数的类称为抽象类
2.类的多态:
是指同样的消息被不同的对象接收时导致的不同行为。
3.动态多态:
是运行时的多态性,是在程序运行中才能确定操作所针对的对象。
2.classPerson
Person(stringnam,chars,inta)
{name=nam;
sex=s;
age=a;
protected:
stringname;
charsex;
intage;
classTeacher:
virtualpublicPerson
Teacher(stringnam,chars,inta,stringt):
Person(nam,s,a)
{title=t;
stringtitle;
classStudent:
{public:
Student(stringnam,chars,inta,floatsco):
Person(nam,s,a),score(sco){}
floatscore;
classGraduate:
publicTeacher,publicStudent
//
Graduate(stringnam,chars,inta,stringt,floatsco,floatw):
Person(nam,s,a),Teacher(nam,s,a,t),Student(nam,s,a,sco),wage(w){}voidshow()
{cout<
"
name:
name<
age:
age<
sex:
sex<
score:
score<
title:
title<
wages:
wage<
floatwage;
intmain()
{Graduategrad1("
Wang-li"
'
f'
24,"
assistant"
89.5,1234.5);
grad1.show();
3.classShape
virtualfloatarea()const{return0.0;
}//虚函数
virtualfloatvolume()const{return0.0;
virtualvoidshapeName()const=0;
//纯虚函数
classPoint:
publicShape//Point是Shape的公用派生类
{protected:
floatx,y;
public:
Point(float=0,float=0);
voidsetPoint(float,float);
floatgetX()const{returnx;
floatgetY()const{returny;
}
//对纯虚函数进行定义
virtualvoidshapeName()const{cout<
Point:
;
}
friendostream&
operator<
(ostream&
constPoint&
);
•Point:
Point(floata,floatb)
•{x=a;
y=b;
•voidPoint:
setPoint(floata,floatb)
•classCircle:
publicPoint//声明Circle类
•{protected:
•floatradius;
•public:
•Circle(floatx=0,floaty=0,floatr=0);
•voidsetRadius(float);
•floatgetRadius()const;
•virtualfloatarea()const;
•//对纯虚函数进行再定义
•virtualvoidshapeName()const{cout<
Circle:
•
•Circle:
Circle(floata,floatb,floatr):
Point(a,b),radius(r){}
•voidCircle:
setRadius(floatr)
•{radius=r;
•floatCircle:
getRadius()const{returnradius;
area()const
•{return3.14159*radius*radius;
•classCylinder:
publicCircle
•{public:
•Cylinder(floatx=0,floaty=0,floatr=0,floath=0);
•voidsetHeight(float);
•floatgetHeight()const;
•virtualfloatvolume()const;
•//对纯虚函数进行再定义
Cylinder:
•friendostream&
(ostream&
constCylinder&
•protected:
•floatheight;
•};
Cylinder(floata,floatb,floatr,floath)
:
Circle(a,b,r),height(h){}
voidCylinder:
setHeight(floath){height=h;
floatCylinder:
getHeight()const{returnheight;
{return2*Circle:
area()+2*3.14159*radius*height;
volume()const
{returnCircle:
area()*height;
intmain()
•{Pointpoint(3.2,4.5);
//建立Point类对象point
•Circlecircle(2.4,12,5.6);
//建立Circle类对象circle
•Cylindercylinder(3.5,6.4,5.2,10.5);
•//建立Cylinder类对象cylinder
•point.shapeName();
//静态关联
•cout<
point