C++程序设计复习题一及答案
一、单项选择题
1.( B )不是属于面向对象程序设计的特性
A. 抽象性
B. 数据相关性
C. 多态性
D. 继承性
2.从程序片断:char name[] = "C++"; course(name);可判断函数course的调用采用的是( D )
A. 传值调用
B. 带缺省参数值的函数调用
C. 引用调用
D. 传址调用
3.如果一个类的成员函数print()不允许修改类的数据成员值,则应将其声明为( A )
A. void print() const;
B. const void print();
C. void const print();
D. void print(const);
4.下列关于构造函数的论述中,不正确的是( C )
A. 构造函数的函数名与类名相同
B. 构造函数可以设置默认参数
C. 构造函数的返回类型缺省为int型
D. 构造函数可以重载
5.在程序代码:A::A(int a, int *b) { this->x = a; this->y = b; }中,this的类型是( D )
A. int
B. int *
C. A
D. A *
6.友元函数( D )
A. 可以被声明为const
B. 可以用类名或对象名来调用
C. 只能用对象名来调用
D.友元函数是独立于当前类的外部函数,没有this指针
7.若一个类的成员函数前用static关键字修饰,则该成员函数( B )
A. 可以被声明为const
B. 没有this指针
C. 可以访问该类的所有成员
D. 只能用对象名来调用
8.公有继承的派生类对象可以访问其基类的( A )
A. 公有成员
B. 公有成员及受保护成员
C. 受保护成员
D. 私有成员
9.设置虚基类的目的是( D )
A. 简化程序
B. 使程序按动态联编方式运行
C. 提高程序运行效率
D. 消除二义性
10.下列关于纯虚函数和抽象类的描述中,不正确的是( D )
A. 纯虚函数是一个没有具体实现的虚函数
B. 抽象类是包括纯虚函数的类
C. 抽象类只能作为基类,其纯虚函数的实现在派生类中给出
D. 可以定义一个抽象类的对象
11.在下面有关析构函数特征的描述中,正确的是( C )。
A. 一个类可以有多个析构函数
B. 析构函数与类名完全相同
C. 析构函数不能指定返回类型
D. 析构函数可以有一个或多个参数
12.下面叙述不正确的是( D )
A. 派生类一般都用公有派生
B. 对基类成员的访问必须是无二义性的
C. 赋值兼容规则也适用于多重继承的组合
D. 基类的公有成员在派生类中仍然是公有的
13.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是( A )
A. 类
B. 对象
C. 函数体
D. 数据块
14.所谓多态性是指( B )
A. 不同的对象调用不同名称的函数
B. 不同的对象调用相同名称的函数
C. 一个对象调用不同名称的函数
D. 一个对象调用不同名称的对象
15.假设ClassY:publicX,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为( A )
A. X,Y,Y,X
B. X,Y,X,Y
C. Y,X,X,Y
D. Y,X,Y,X
16.关于new运算符的下列描述中,错误的是( D )
A. 它可以用来动态创建对象和对象数组
B. 使用它创建的对象或对象数组可以使用运算符delete删除
C. 使用它创建对象时要调用构造函数
D. 使用它创建对象数组时必须指定初始值
17.下列有关重载函数的说法中正确的是( C )
A. 重载函数必须具有不同的返回值类型
B. 重载函数只要参数个数相同
C. 重载函数必须有不同的形参列表
D. 重载函数名可以不同
18.类MyA的拷贝初始化构造函数是( C )
A. MyA()
B. MyA(MyA*)
C. MyA(MyA&)
D. MyA(MyA)
19. 已知: int x, y;下列表达式中,非法的是( C ) 。
A. x%y
B. y=-x
C. --(x*y)
D. x+=y
20. 已知: int x, y;下列循环的执行次数是( A ) 。
for(x(0),y(0);!y&&x<=5;x++,y++)
{ … }
A.1 B. 2 C. 5 D. 无限
21. 己知: int a ,*p; 下列操作中,非法的是( B ) 。
A. p=a
B. p=&a
C. *p=9
D. p!=a;
22.下列有关语句的描述中,错误的是( C )。
A.条件语句中,else子句可以有0个或1个
B.Continue语句只能出现在循环体内
C.Switch语句不能出现在循环体内
D.循环语句可以自身嵌套,也可以相互嵌套
23.下列关于构造函数的描述中,错误的是( A )。
A.构造函数是没有名字的B.构造函数是可以重载的
C.构造函数是系统自动调用的D.构造函数是可以没有参数的
24.下列关于运算符new的描述中,错误的是( D )。
A.new运算符用来创建动态对象
B.new运算符用来创建堆对象时可进行初始化
C.用new运算符创建的对象可用delete运算符释放
D.用new运算符可创建对象数据,并可同时进行初始化
25.下列关于公有继承方式下基类成员在派生类中访问性的描述,其中错误的是( A )。A.基类中私有成员在派生类中为私有成员
B.基类中公有成员在派生类中为公有成员
C.基类中保护成员在派生类中为保护成员
D.派生类中成员函数不能访问基类私有成员
构造函数可以被重载26.类的构造函数的成员初始化列表中,不可以包含( C )。
A.基类构造函数B.子对象类的构造函数
C.静态数据成员初始化D.常数据成员的初始
27.已知:B类是A类的公有继承的派生类,下列描述中,错误的是( A )。
A.A类的对象就是B类的对象
B.B类对象可以给A类对象赋值
C.B类对象的地址值可以给A类对象指针赋值
D.B类对象可以给A类对象引用赋值
28.下列关于派生类定义格式的描述中,错误的是( B )。
A.定义派生类可用关键字class或struct
B.定义派生类时要指出派生类的类名和基类的类名
C.定义派生类时一定要给出继承方式,不能默认
D.定义派生类时,类体中给出派生类的成员
二、填空题
1.C++中__不支持__虚构造函数,但__支持___虚析构函数。
2. 对基类数据成员的初始化必须在派生类构造函数中的____成员初始化列表___处执行。
3. ___new_____运算符对指定类型对象动态分配内存并返回__指向该类型对象的指针___。
4. ___delete_____运算符删除第3题的运算符所动态分配的内存空间。
5. 复制(或拷贝)构造函数使用___对象的引用______作为形式参数。
6. C++中语句const char * const p=“hello”;所定义的___指针p和它指向的内容_不能被修改。
7.由const修饰的对象称为___常对象_____。
8.vector类中向向量尾部插入一个对象的方法是_push_back__。
9.类模板用来表达具有_ 相同处理办法__的模板类对象集。所有模板都是以_template关键字和一个形参表开头的。
10.异常处理中,如果没有匹配所抛出的对象类型的catch语句块,这时系统调用默认
_terminate()_终止程序。
三、判断题
1.异常处理时与函数重载解析不同,异常处理是由最先匹配的catch子句处理,而不是由最佳匹配的catch子句处理,所以catch子句的排列次序是很重要的。(T )
2.异常也适用类的层次结构,与虚函数的规则相同,基类的异常能被派生类异常catch子句处理,而派生类的异常不能被基类异常catch子句处理。( F )
3.编译器通过如下匹配规则确定调用那一个函数:首先,寻最符合函数名和参数类型的一般函数,若
到则调用该函数;否则寻一个函数模板,将其实例化成一个模板函数,看是否匹配,如果匹配,就调用该模板函数;再则,通过类型转换规则进行参数的匹配。如果还没有到匹配的函数则调用错误。如果有多于一个函数匹配,则调用产生二义性,也将产生错误。(T )
4.类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型(包括系统预定类型和用户自定义的类型)。(T )
5.类是对一组对象的公共性质的抽象,而类模板则是对不同类的数据类型的抽象,因此类模板是属于更高层次的抽象。(T )
6.在磁盘文件操作中,打开磁盘文件的访问模式常量时,ios::app是以追加方式打开文件的。( T )
7.根据建立对象时的实际数据类型,编译器把类模板实例化为模板类。(T )
8.函数的类模板参数须通过构造函数实例化。( F )
四、阅读下列程序并写出运行结果
1.下面程序的运行结果是________。
class test { private:
int num;
float fl;
public:
test( );
int getint( ){return num;}
float getfloat( ){return fl;}
~test( ); };
test::test( )
{
cout << "Initalizing default" << endl;
num=0;fl=0.0;
}
test::~test( )
{
cout << "Desdtructor is active" << endl;
}
void main( )
{
test array[2];
cout << array[1].getint( )<< " " << array[1].getfloat( ) <<endl;
}
Initalizing default
Initalizing default
0 0
Desdtructor is active
Desdtructor is active
2.下面程序的运行结果是________。
#include <stdio.h>
int a[ ]={1,3,5,7,9};
int *p[ ]={a,a+1,a+2,a+3,a+4};
void main( )
{
printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);
printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]); }
9 5 3
8 4 7
3.class Test{
static int num;
public:
Test(){}
Test(int n){num=n;}
static void show(){cout<<num<<endl;}
};
int Test::num=5;
void main()
{ Test t1; t1.show();
Test::show();
Test t2(10); t1.show(); t2.show();
Test::show();
}
5
5
10
10
10
4.class A
{int *a;
public:
A(int x=0):a(new int(x)){}
~A() {delete a;}
int getA() {return *a;}
void setA(int x) {*a=x;}
};
void main(){
A x1,x2(3);
A *p=&x2;
(*p).A()+5);
x1.setA(A());
cout<&A()<<endl;
cout<&A()<<endl;}
10
8
五、编程题
1.设计一个汽车类V ehicle,包含数据成员车轮数和车重,以及相应的成员函数(获得车轮个数、获得车重和显示函数show)、有参数构造函数,只需写出类即可。
class vehicle
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论