面向对象程序设计复习试题答案.docx
《面向对象程序设计复习试题答案.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计复习试题答案.docx(60页珍藏版)》请在冰豆网上搜索。
面向对象程序设计复习试题答案
语法扩充
1.1选择题
在C++中用(D)能够实现将参数值带回。
a)数组 b)指针 c)引用 d)上述ABC都可
考虑函数原型voidtest(inta,intb=7,char*ch=”*"),下面得函数调用中,属于不合法调用得就是:
( C )
A)test(5) B)test(5,8) C)test(6,"#”) D)test(0,0,"*”);
已知:
intm=10;下列表示引用得方法中,正确得就是:
( C )
A)int &Z;B)int&t=10; C)int&X=m;D)float &f=&m;
下列不就是函数重载所要求得条件就是:
(D )
A)函数名相同 B)参数个数不同
C)参数类型不同 D)函数返回值类型不同
在C++中执行以下4条语句后输出rad值为:
(C)
staticinthot=200;
int&rad=hot;
hot=hot+100;
cout<<rad<<endl;
A) 0 B)100 C)300 D)200
系统在调用重载函数时,不能作为确定哪个重载函数被调用得依据就是:
(D)
A)参数个数 B)参数类型 C)函数名称D)函数得返回值类型
对C++语言与C语言得兼容性,描述正确得就是:
( A)
A)C++兼容CB)C++部分兼容C C)C++不兼容CD)C兼容C++
在C++中使用流进行输入输出,其中用于屏幕输出得对象就是:
(C )
A)cerrB)cin C)coutD)cfile
对使用关键字new所开辟得动态存储空间,释放时必须使用(C )
A)free B)create C)delete D)realse
在函数调用时,如某一默认参数要指明一个特定值,则有( A )
A)其之前所有参数都必须赋值 B)其之后所有参数都必须赋值
C)其前、后所有参数都必须赋值 D)其前、后所有参数都不必赋值
下列哪个类型函数不适合声明为内联函数(A)
A)函数体语句较多B)函数体语句较少
C)函数执行时间较短 D)函数执行时间过长
int Func(int,int);不可与下列哪个函数构成重载( B )
A)intFunc(int,int,int); B)doubleFunc(int,int);
C)doubleFunc(double,double); D)doubleFunc(int,double);
下面得哪个保留字不能作为函数得返回类型(C)
A)voidB)intC)newD)long
一个函数功能不太复杂,但要求被频繁调用,选用(A )、
A。
内联函数 B、重载函数 C.递归函数D。
嵌套函数
已知函数f得原型为:
void f(int&a,char*b);变量s,t得定义就是:
ints;chart[]="ABCD";
把s与t分别作为第一参数与第二参数来调用函数f,正确得调用语句就是(C )
Af(&s,&t);B f(&s,t);Cf(s,t);D f(s,&t);
若定义cin>〉str;
当输入
Microsoft VisualStudio6、0!
所得结果就是str=(B)、
A、MicrosoftVisual Studio6。
0!
B、Microsoft
C、 MicrosoftVisual
D、MicrosoftVisualStudio 6.0
、函数模板(C)。
A、代表某一具体函数
B、与模板函数就是同一个函数
C、与某一个具体得数据类型连用
D、就是模板函数实例化得结果
在C++中,关于下列设置参数默认值得描述中,正确得就是(C)
A、不允许设置参数得默认值
B、设置参数默认值只能在定义函数时设置
C、设置参数默认值时,应该就是先设置右边得再设置左边得
D、设置参数默认值时,应该全部参数都设置
下列表示引用得方法中,(A)就是正确得。
已知:
k=1000;
A、int&x=k; B、char &y;
C、int&z=1000; D、float&t=&k;
有如下模板定义:
template〈classT>Tfun(Tx,T y){returnx*x+y*y;}
在下列对fun得调用中,错误得就是:
( C)
A)fun(2,8) B)fun(2、0,8.2)C)fun(2、3,8)D)fun(‘2’,’8’)
通常情况下,函数模板中得类型参数个数不能就是(A )
A)0个 B)1个 C)2个 D)3个
1、2填空题
1、假定有如下定义:
intx;,若要将整型变量y定义为变量x得引用,则应使用得定义语句就是_int&y=x;________。
具有相同函数名但具有不同参数表得函数称为重载函数。
'
2、在进行函数调用时,将把参数得值传递给值参数,把参数得_地址_传递给引用参数。
3、执行完下列三条语句后,指针变量c指向__b___。
Inta,b,*c=&a;
int*&p=c;
p=&b;
4、假设有如下函数定义:
voidFun(intx,inty=100);则语旬Fun(5)语句__Fun(5,100)_等价。
5、在一个C++程序中,每个变量都必须遵循__先定义后使用__得原则、
6、 下面就是一个求数组元素之与得程序。
主程序中定义并初始化了一个数组,然后计算该数组各元素之与,并输出结果。
函数TotalSum计算数组元素之与。
请完成下列程序、
#includeh〉
__int Totalsum(int array[],int len)__;
voidmain()
{
inta[5]={2,3,6,8,10};
__int Total___;
Total=Totalsum(a,5);
cout<〈"Sumofarray:
"〈〈Total〈<endl;
}
intTotalsum(intarray[],int len)
{
____int sum=0____;
for(int I=0;____I____sum+=array[I]_____;
returnsum;
}
7、 下面得函数Fun未使用中间变量实现了对两个数得交换,请完成下列函数得定义。
Void Fun (int &x,int &y)
{
x+=y;
y =___x—y____;
__x= x—y_____;
}
8、定义一个函数时,若只允许函数体访问形参得值而不允许修改它得值,则应把该形参声明为__常量__,即在该形参声明得前面加上__const__关键字进行修饰。
9、 在一个函数得定义或声明前加上关键字__inline__时,该函数就声明为内联函数。
1、3简答题
A、、内联函数得含义
在函数前加上关键字inline说明了一个内联函数,这使一个函数在程序行里进行代码扩展而不被调用。
这样得好处就是减少了函数调用得开销,产生较快得执行速度、但就是由于重复编码会产生较长代码,所以内联函数通常都非常小、如果一个函数在类说明中定义,则将自动转换成内联函数而无需用inline说明。
B、。
函数重载得含义
在同一作用域范围内,相同得函数名通过不同得参数类型或参数个数可以定义几个函数,编译时编译器能够识别实参得个数与类型来决定该调用哪个具体函数。
需要注意得就是,如果两个函数仅仅返回类型不同,则编译时将会出错,因为返回类型不足以提供足够得信息以使编译程序判断该使用哪个函数。
所以函数重载时必须就是参数类型或者数量不同。
C、引用与指针得区别
D、内联函数使用上得限制
E、定义带默认参数值函数得规则
F、指针与常量得关系
1。
4程序阅读题
1)写出下列程序得运行结果、
#include〈iostream.h〉
voidmain()
{
ﻩint x;
int&p=x;
x=10;
p=x+10;
cout<<x<<","<<p〈<endl;
}
结果:
20,20
2)写出下列程序得运行结果。
#include
intf(inta)
{
ﻩreturn ++a;
}
intg(int &a)
{
ﻩreturn++a;
}
voidmain()
{
ﻩintm=0,n=0;
ﻩm+=f(g(m));
ﻩn+=f(f(n));
cout〈<"m="<ﻩcout<<"n="<〈n〈〈endl;
}
结果:
m=3
n=2
3) 写出下列程序得运行结果。
#include<iostream、h>
voidFun()
{
intnum=20;
cout〈<”TheFun’s numis"〈<num<}
voidmain()
{
ﻩintnum=10;
ﻩcout<<"The main'snum is"<〈num〈〈endl;
Fun();
{
ﻩintnum=30;
ﻩﻩcout<〈"The Field'snumis ”<<num〈}
cout<<"The main's num is"<〈num<}
结果:
Themain'snumis10
TheFun'snumis20
TheField’snumis 30
The main’snum is10
类与对象
2。
1选择题
下列得各类函数中,不就是类得成员函数。
( C)
A)构造函数 B)析构函数 C)友元函数D)拷贝初始化构造函数
作用域运算符“:
:
”得功能就是:
( B)
A)标识作用域得级别得 B)指出作用域得范围得
C)给定作用域得大小得D)标识成员就是属于哪个类得
已知:
print()函数就是一个类得常成员函数,它无返回值,下列表示中,就是正确得。
( A)
A)voidprint()const; B)constvoidprint();
C)voidconstprint():
D)void print(const);
在类定义得外部,可以被访问得成员有(C )
A)所有类成员 B)private得类成员
C)public得类成员 D)public或private得类成员
关于类与对象不正确得说法就是:
( C )
A)类就是一种类型,它封装了数据与操作 B)对象就是类得实例
C)一个类得对象只有一个 D)一个对象必属于某个类
在C++中实现封装就是借助于(B)
A)枚举 B)类 C)数组 D)函数
定义析构函数时,应该注意:
(C )
A)其名与类名完全相同 B)返回类型就是void类型
C)无形参,也不可重载 D)函数体中必须有delete语句
类claseCC1得说明如下,错误得语句就是:
(A)
claseCC1{
inta=2; //(A)
CC1(); //(B)
public:
CC1(intval);//(C)
~CC1(); //(D)
};
类得指针成员得初始化就是通过函数完成得,这个函数通常就是:
(B)
A)析构函数 B)构造函数 C)其它成员函数 D)友元函数
关于构造函数得说法,不正确得就是:
(A)
A)没有定义构造函数时,系统将不会调用它 B)其名与类名完全相同
C)它在对象被创建时由系统自动调用 D)没有返回值
通常拷贝构造函数得参数就是:
(C )
A)对象名 B)对象得成员名 C)对象得引用名D)对象得指针名
关于成员函数特征得描述中,错误得就是:
(A)
A)成员函数一定就是内联函数 B)成员函数可以重载
C)成员函数可以设置参数得默认值 D)成员函数可以就是静态得
下列关于构造函数得描述中,错误得就是:
( D )
A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行
C)构造函数可以就是内联函数; D)构造函数不可以重载
有如下类声明“class A{int x;……};",则A类得成员x就是:
(B)
A)公有数据成员B)私有数据成员 C)公有成员函数 D)私有成员函数
类TM与类TN就是两个独立得类,那么类TM中哪种形式得数据成员一定就是不允许得:
( C)
A)TM*a B)TN&a C)TMa D)TNa;
以下关于this指针得叙述中正确得就是:
(D )
A)任何与类相关得函数都有this指针;B)类得成员函数都有this指针;
C)类得友员函数都有this指针; D)类得非静态成员函数才有this指针;
.关于类模板得说法正确得就是:
(B)
A)类模板得主要作用就是生成抽象类
B)类模板实例化时,编译器将根据给出得模板实参生成一个类
C)在类模板中得数据成员具有同样类型
D)类模板中得成员函数没有返回值
。
以下关键字不能用来声明类得访问权限得就是:
( C )
A)public B)privateC)static D)protected
.类得私有成员可在何处访问(D )
A)通过子类得对象访问 B)本类及子类得成员函数中
C)通过该类对象访问 D)本类得成员函数中
.如果没有为一个类定义任何构造函数得情况下,下列描述正确得就是:
(A)
A)编译器总就是自动创建一个不带参数得构造函数 B)这个类没有构造函数
C)这个类不需要构造函数 D)该类不能通过编译
.一个类可包含析构函数得个数就是:
( B)
A)0个 B)1个 C)0个或1个 D)0个或多个
。
一个类可包含构造函数得个数就是:
( D )
A)0个 B)0个或1个 C)0个或多个 D)1个或多个
.this指针存在得目得就是:
(B )
A)保证基类公有成员在子类中可以被访问
B)保证每个对象拥有自己得数据成员,但共享处理这些数据成员得代码
C)保证基类保护成员在子类中可以被访问
D)保证基类私有成员在子类中可以被访问
.下列关于类得权限得描述错误得就是:
( A)
A)类本身得成员函数只能访问自身得私有成员
B)类得对象只能访问该类得公有成员
C)普通函数不能直接访问类得公有成员,必须通过对象访问
D)一个类可以将另一个类得对象作为成员
、设类A将其它类对象作为成员,则建立A类对象时,下列描述正确得就是:
( B )
A)A类构造函数先执行 B)成员构造函数先执行
C)两者并行执行 D)不能确定
。
假定有类AB,有相应得构造函数定义,能正确执行“AB a(4),b(5), c[3],*p[2]={&a,&b};”语句,请问执行完此语句后共调用该类构造函数得次数为(C)
A)3 B)4 C)5D)6
拷贝构造函数得作用就是( C )、
A。
进行数据类型得转换 B。
用对象调用成员函数
C、用对象初始化对象 D。
用一般类型得数据初始化对象
下列静态数据成员得特性中,错误得就是(D )。
A.静态数据成员得声明以关键字static开头
B、静态数据成员必须在文件作用域内初始化
C. 引导数据成员时,要在静态数据成员前加(类名)与作用域运算符
D、静态数据成员不就是类所有对象共享得
通过指针访问类对象成员得方法就是(D)。
A。
:
:
B。
; C.、 D、—〉
静态成员函数没有(B )。
A。
返回值 B.this指针 C。
指针参数 D。
返回类型
在下列关键字中,用于说明类中公有成员得就是(A)。
A、public;B.private; C.protected;D、friend
不就是构造函数得特征(D )。
A。
构造函数得函数名与类名相同; B。
构造函数可以重载;
C。
构造函数可以设置缺省参数; D。
构造函数必须指定类型说明。
就是析构函数得特征(A)。
A.一个类中只能定义一个析构函数; B、 析构函数名与类名不同;
C。
析构函数得定义只能在类体内; D. 析构函数可以有一个或多个参数。
关于成员函数特征得下述描述中,(A)就是错误得。
A.成员函数一定就是内联函数; B、 成员函数可以重载;
C.成员函数可以设置参数得缺省值; D、 成员函数可以就是静态得。
下述静态数据成员得特性中,( D)就是错误得。
A.说明静态数据成员时前边要加修饰符static;
B、静态数据成员要在类体外进行初始化;
C、引用静态数据成员时,要在静态数据成员名前加<类名>与作用域运算符;
D.静态数据成员不就是所有对象所共用得。
2。
2填空题
1、在撤销类得对象时,C++程序将自动调用该对象得__析构___函数。
2、类中得构造函数就是一个特殊得成员函数,它由类得对象__自动_调用,它得作用就是___为对象分配内存,数据成员初始化___、
3、对类中得成员函数与属性得访问就是通过__public__、__protected__与___private__这3个关键字来控制得。
4、__delete__运算符删除new运算符所动态分配得内存空间。
5、假定用户没有给一个名为MyClass得类定义析构函数,则系统为其定义得默认析构函数形式为__MyClass()__。
6、类中构造函数有__一个或多__个,析构函数有___一___个。
7、类就是对具有共同属性与行为得一类事物得抽象描述,共同属性被描述为类中得___数据成员___,共同行为被描述为类中得__成员函数__。
8、若要把类FriendClass定义为类MyClass得友元类,则应在类MyClass得定义中加入语句_friend classFriendClass;___、
9、在结构定义中,数据与成员函数默认权限就是__public__。
在类定义中,数据与成员函数默认权限就是__private___、
10、在下面程序得横线处填上适当得语句,使类型该程序执行结果为10。
#includeh>
class MyClass
{
pub1ic:
___MyClass (int a ){_x=a;}____//为x置值
__int GetNum(){ returnx;}______ //取x值
private:
intx;
};
void main()
{
Myclassmy(10);
Cout<<my、GetNum()〈<end;
}
11、完成下面得类定义、
Class MyClass
{
public:
MyClass(){x=0;}
____friend______intGetNum(___MyClass______my);
private:
intx;
};
int GetNum(____MyClass______my)
{
___return my、x;
}
12、__new__运算符对指定类型对象动态分配内存并返回该类型得__指针__。
13、若要把函数voidFriendFunction()定义为类MyClass得友元函数,则应在类MyClass得定义中加入语句__friendvoidFriendFunction();_______。
14、类得具体表现就是通过定义_对象__来操作得。
15、在定义类得对象时,C++程序将自动调用该对象得__构造___函数初始化对象自身。
16、一般情况下,按照面向对象得要求,把类中得数据成员(属性)定义为__private__权限,而把成员函数(方法)定义为__public__权限。
17、在类中定义与实现得函数称为_内联函数__。
18、非成员函数应声明为类得__友元函数__才能访问这个类得private成员。
2.3简答题
A、类得含义
B、构造函数得特点
C、拷贝构造函数得调用
D、析构函数得定义及其特点
E、静态成员得分类及各自得特点
2。
4程序阅读题
1) 写出下列程序得运行结果。
#includeh>
classMyClass
{
char ch;
public:
MyClass();
MyClass(charcharacter);
voidPrint();
ﻩ~MyClass();
};
MyClass:
:
MyClass()
{
cout<〈"Thisisa constructor!
"<ch=’a’;
}
MyClass:
:
MyClass(charcharacter)
{
cout<<"Thisisaconstructor!
”<<endl;
ﻩch=character;
}
voidMyClass:
:
Print()
{
ﻩcout<〈”The valueof chis”〈<ch<}
MyClass:
:
~MyClass()
{
cout〈〈"This isadestructor!
"<〈endl;
}
voidmain()
{
ﻩMyClassfirst,second('b');
first、Print();
second。
Print();
}
运行结果:
Thisisaconstructor!
Thisis aconstructor!
The value ofchisa
Thevalueofchisb
Thisisa destructor!
Thisisadestructor!
2)写出下列程序得运行结果
#include〈iostream。
h>
classMyClass
{
public:
MyClass();
voidPrint();
~MyClass();
private:
int I;
staticintj;
};
intMyClass:
:
j=0;
MyClass:
:
MyClass()
{
cout〈<”Thisis constructor!
"〈j+=10;
}
void MyClass:
:
Print()
{
cout<〈"Thevalueof j is" 〈<J〈〈endl;
}
MyClass