2.假设已经有定义const char*name=”chen”;下面的语句中错误的是(A)
A.name[3]=’q’; B.name=”lin”; C.name=newchar[5] D.name=newchar(‘q’);
3.在下面有关对构造函数的描述中,正确的是(B)
A.构造函数可以带有返回值 B.构造函数的名字与类名完全相同 C.构造函数必须带有参数 D.构造函数必须定义,不能缺省
4.在下面有关析构函数特征的描述中,正确的是(C)
A.一个类可以定义多个析构函数B.析构函数名与类名完全相同C.析构函数不能指定返回类型 D.析构函数可以有一个或多个参数
5.在下面有关静态成员函数的描述中,正确的是(B)
A.在静态成员函数中可以使用this指针 B.在建立对象前,就可以为静态数据成员赋值
C.静态成员函数在类外定义时,要用static前缀 D.静态成员函数只能在类外定义
6.友元的作用之一是(A)
A.提高程序的运行效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类
7.假设已经定义好了一个类student,现在要定义类derived,它是从student私有派生的,定义类derived的正确写法是(C)
A.classderived:
:
studentprivate B.classderived:
studentpublic
C.classderived:
privatestudent{//… } D.classderived:
:
publicstudent{//… }
8.要实现动态联编,派生类中的虚函数(D)
A.返回的类型可以与虚函数的原型不同B.参数个数可以与虚函数的原型不同C.参数类型可以与虚函数的原型不同D.以上都不对
9.有关运算符重载正确的描述是(D)
A.C++语言允许在重载运算符时改变运算符的操作个数 B.C++语言允许在重载运算符时改变运算符的优先级
C.C++语言允许在重载运算符时改变运算符的结合性 D.C++语言允许在重载运算符时改变运算符的原来的功能
10.假设定义了函数模板:
template
Tmax(Tx,Ty)
{return(x>y)?
x:
y;}
并定义了inti=6;charc=’a’;错误的调用语句是(D)
A.max(i,i) B.max(c,c) C.max((int)c,i) D.max(i,c)
C卷
一、单项选择题:
(每小题2分,共20分)
1、假设已经有定义constchar*name=”chen”;下列语句中错误的是_____________
A.name[3]=’q’ B.name=”lin” C.name=newchar[5] D.name=newchar(‘q’)
2、在下列关键字中,用于说明类中公有成员的是____________
A.public B.private C.protected D.friend
3、下列哪项不是面向对象程序设计的主要特征_______________。
A.封装 B.继承 D.多态 D.结构
4、构造函数是在__________时被执行的。
A.程序编译 B.创建对象 C.创建类 D.程序装入内存
5、在下面有关析构函数的描述中,正确的是____________
A.一个类中可以定义多个析构函数
B.析构函数的名字和类名完全相同
C.析构函数不能指定返回类型
D.析构函数可以有一个或多个参数
6、使用派生类的主要原因是_______________
A.提高代码的可充用性 B.提高程序的运行效率 C.加强类的封装性 D.实现数据的隐藏
7、下列的各函数中,___________不是类的成员函数.
A.构造函数 B.析构函数 C.友元函数 D.拷贝构造函数
8、关于虚函数,正确的描述是_______________
A.构造函数不能是虚函数 B.析构函数不能是虚函数
C.虚函数可以是友元函数 D.虚函数可以是静态成员函数
9、友元的作用之一是____________
A.提高程序的运用效率 B.加强类的封装性
C.实现数据的隐藏性 D.增加成员函数的种类
10、在下面有关静态成员函数的描述中,正确的是________________
A.在静态成员函数中可以使用this指针
B.在建立对象前,就可以为静态数据成员赋值
C.静态成员函数在类外定义时,要用static前缀
D.静态成员函数只能在类外定义
二、判断题:
(每题1分,共10分)
( )1、使用关键字class定义的类中缺省的访问权限是私有(private)的。
( )2、构造函数和析构函数都不能重载。
( )3、说明或定义对象时,类名前不需加关键字class。
( )4、可以在类的构造函数中对静态数据成员进行初始化。
( )5、protected和private区别在于protected成员可以被派生类访问,而private成员则不能被派生类访问。
( )6、在C++中,封装是通过类实现的。
( )7、无论何时编译器都为类构造一个无参数的缺省的构造函数。
( )8、无论什么方式的继承,基类的私有成员都不能被派生类访问。
( )9、在c++中,只有在类对象定义之后才能给数据成员赋初值。
( )10、创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。
三、填空题:
(每空1分,共10分)
1、在C++中,类的成员访问权限分别是:
公有成员,私有成员和_________________。
2、拷贝构造函数使用_______________作为参数初始化创建中的对象。
3、在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的______________特性。
4、在公有继承的情况下,基类数据成员在派生类中的访问权限__________________。
5、在面向对象的程序设计中,通过________实现数据隐藏;通过________实现代码的复用。
6、在C++中,构造派生类对象时,总是先从_________的初始化开始的。
7、在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。
对两个有相同名字的数据成员进行访问时,如果没有___________,对此数据成员的访问将出现歧义;而________、_________和operator=是不能被派生类继承的。
一、单项选择题:
(每小题2分,共20分)
AADBC ACAAB
二、判断题:
(每题1分,共10分)
对错对错对 对错对对对
三、填空题:
(每空1分,共10分)
1、受保护成员
2、同类对象的引用
3、封装
4、公有的
5、封装,继承
6、基类
7、作用域分隔符限定,构造函数,析构函数
D卷
1.下类引用定义中,正确的是(D)
A.intx,int&y=x;B.intx;int&y=x,x;
C.floatx;inty=&z;D.intx;int&y=x;
2.假设已经有定义constchar*constname=”chen”;下面的语句中正确的是(D)
A.name[3]=’a’; B.name=”lin”; C.name=newchar[5] D.cout<3系统在调用重载函数时往往根据一些条件确定那个重载函数被调用,在下列选项中,不能作为依据的是(D)
A.参数个数B.参数的类型C.函数名D.函数类型(返回值类型)
4、构造函数是在(B)时被执行的。
A.程序编译 B.创建对象 C.创建类 D.程序装入内存
5、在下面有关析构函数的描述中,正确的是(C)
A.一个类中可以定义多个析构函数
B.析构函数的名字和类名完全相同
C.析构函数不能指定返回类型
D.析构函数可以有一个或多个参数
6.有以下类的说明,错误的地方是()
classCoord
{intx=0;y=0;
Coord();
public:
Coord(intx,inty);
~Coord();
};
A.
B.
C.
D.
7.this指针是一个隐含于每一个类的成员函数的特殊指针,它是用来指向正在操作成员函数的()的指针。
A.对象B.函数C.成员D.类型
8.有关类和对象的说法不正确的是(C)
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象D.类与对象的关系和数据类型和变量的关系相似
9.在下面有关友元函数的描述中,正确的说法是(A)
A.友元函数是独立于当前类的外部函数 B.一个友元函数不能同时定义为两个类的有友元函数
C.友元函数必须在类的外部定义 D.在外部定义友元函数时,必须加关键字friend
10.派生类新增的成员函数,不能直接访问基类的(C)成员。
A.公有B.保护C.私有D.所有
11.下述静态数据成员的特性中,(D)是错误的。
A说明静态数据成员时前面要加修饰符static
B静态数据成员要在类体外进行初始化
C引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D类的静态成员不实所有对象所共用的
E卷
1.在C++中,用数组、指针、和引用作为函数参数,能够将参数值带回。
2.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的封装特性。
3.在C++中,构造派生类对象时,总是先从基类的初始化开始的。
4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是拷贝每一个数据成员。
5.类是用户定义的类型,具有类类型的变量称作对象。
6.在5个运算符"*(乘号)、<=、!
=、!
、&&"中,优先级由高到低的顺序是!
、*(乘号)、<=、!
=、&&。
7.在C++中,类定义一般用class关键字,不过用struct关键字也可以定义类,它们定义类的区别在于在缺省访问权限时,struct类成员是公有的,而class类成员是私有的。
8.静态的成员函数没有隐含的this指针,所以,它们只能访问静态的数据成员。
9.与"(!
a==0)"等价的C++表达式是(a>0||a<0)或(a)。
10.若a=6,b=4,c=2,则表达式"!
(a-b)+c-1&&b+c/2"的值是1。
11.在面向对象的程序设计中,通过_封装_实现数据隐藏;通过_继承_实现代码的复用。
12.在下面的程序段中,语句"constint*c=&a;"和语句"int*constd=&b;"的含义分别是变量指针c指向整型常量a、常量指针d指向整型变量b。
constinta=78;
intb=28;
constint*c=&a;
int*constd=&b;
13.用new申请有10个元素的指针数组str,假定数组元素是指向字符型数据的指针,该C++语句为char**str=newchar*[10];。
14.在C++中构造一个对象时,其数据成员在构造函数中初始化。
对于内嵌的对象、常量、引用数据成员需要在构造函数的成员初始化列表中初始化。
15.在类的定义中,说明为protected的数据成员称为保护成员。
保护数据成员具有双重作用:
对于其派生类而言,是公有的;而对于其外部的程序而言,是私有的。
16.C++中有两种数据类型:
整型和字符型可以使用signed修饰符。
。
17.举出C++中两种流程控制语句if语句、for循环语句。
18.预编译指令由三种,它们是:
文件包含、宏定义和条件编译。
19.C|++中,对象保存在内存中,栈内存是自动分配和释放的,而堆存需要用户自己申请和释放。
20.在C++函数中,可用return语句带回一个值。
如果有多个返回值,可用指针、引用等带回。
21.下面程序的运行结果是6。
#include
voidmain()
{
chara='0',b='9';
floatx;
x=(b-a)/('F'-'B');
printf("%d\n",(int)(3.14*x));
}
22.以下程序的输出结果是 **#**#**#$ 。
#include
voidmain()
{
inti;
for(i=0;i<=5;i++){
if(i%2)printf("**");
elsecontinue;
printf("#");
}
printf("$\n");
}
23.下面程序的运行结果是Hello50OK!
。
#include
#defineN100
classCStack
{
public:
CStack(){top=0;cout<<"Hello";}
~CStack(){cout<<"Bye";}
voidpush(inti);
intpop();
private:
intstack[N];
inttop;
};
voidCStack:
:
push(inti)
{
if(top==N){
cout<<"Overflow";
return;
}
else{
top++;
stack[top]=i;
}
}
intCStack:
:
pop()
{
inttemp;
if(top==0){
cout<<"Underflow";
return0;
}
else{
temp=st