国家二级C++机试(类和对象)模拟试卷15
选择题
1.有如下类声明:
c1ass Foo{ int bar; );
则Foo类的成员bar是( )。(C)
A. 公有数据成员
B. 公有成员函数
C. 私有数据成员
D. 私有成员函数
解析:此题考查的是类的定义。在定义类的成员变量时,如果没有使用关键字;所有成员默认定义为private私有权限。
2.有如下类定义:
c1ass Foo
{
public:
Foo(int v):value(v){} //①
~Foo(){} //②
private:
Foo(){} //③
int value=0: //④
};
其中存在语法错误的行是( )。(D)
A. ①
B. ②
C. ③
D. ④
解析:此题考查的是类的定义。C++语言规定,在类体内不允许对所定义的数据成员进行初始化。
3.有如下类定义:
c1ass Test
{
public:
Test(){a=0;c=0;} //①
int f(int a)const{this—>a=a;} //②
static int g(){return a;} //③
void h(int b){Test::b=b;}; //④
private:
int a;
static int b;
const int c;
};
int Test::b=0;
在标注号码的行中,能被正确编译的是( )。(D)
A. ①
B. ②
C. ③
D. ④
解析:此题考查的是类的定义。一个类的长数据成员的初始化只能在成员初始化列表中进行,故选项A错误;常成员函数不能更新对象的数据成员,故选项B错误:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员,故选项C错误。
4.有如下类声明:
c1ass SAMPLE
{
int n;
public:
SAMPLE(int i=0):n(i){}
void setValue(int n0);
};
下列关于getValue成员函数的实现中,正确的是( )。
B
解析:此题考查了成员函数的定义格式。在类外部对成员函数定义时的一般格式为:返回类型类名∷成员函数名(参数表){函数体),故此题正确答案为选项B。
5.以下关键字不能用来声明类的访问权限的是( )。(B)
A. public
B. static
C. protected
D. private
解析:此题考查的是类的访问权限。在C++语言中,类的访问权限有公有、保护和私有三种。故本题选B。
6.下列关于类定义的说法中,正确的是( )。(A)
A. 类定义中包括数据成员和函数成员的声明
B. 类成员的缺省访问权限是保护的
C. 数据成员必须被声明为私有的
D. 成员函数只能在类体外进行定义
解析:此题考查的是类的定义。类中缺省的访问权限是私有的,所以选项B错误;类的数据成员和成员函数的访问控制权限均可被声明为公有、私有和保护中的一种,所以选项C错误:成员函数的实现可以在类体内定义,也可以在类体外定义,所以选项D错误。
7.如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是( )。(D)
A. public和public
B. public和protected
C. protected和public
D. protected和protected
解析:此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员:派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员:派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。
8.下列运算符函数中,肯定不属于类Value的成员函数的是( )。(B)
A. Value operator+(Value);
B. Value operator—(Value, Value);
C. Value operator*(int);
D. Value operator/(Value);
解析:运算符作为非成员函数时,由于没有隐含this指针,因此所有的操作数必须出现在参数表中。对于第二个选项,出现了两个操作数,必然是非成员函数,但是对于其他三个选项,有可能都是要求两个操作数的成员函数。
9.有如下程序:
#inc1ude<iostream>
#inc1ude<cstring>
using namespace std;
c1ass XCD{
char*a;
int b;
public:
XCD(char* aa,int bb){
a=new char[strlen(aa)+1];
strcpy(a,aa),
b=bb;
}
char* Geta(){ returna;}
int Getb(){retum b;}
};
int main(){
char *p1=\\(A)
A. 12
B. 16
C. 14
D. 11
解析:由类XCD的定义可知,成员函数Geta()返回的是字符串的长度,Getb()返回的是参数b的值。在主函数中str1en(x.Geta())的值等于4,y.Getb()的值等于8,所以输出两者的和为12。
10.有如下两个类定义:
c1ass AA{};
c1ass BB{
AA v1,*v2;
BB v3;
int *v4;
};
其中有一个成员变量的定义是错误的,这个变量是( )。(C)
A. v1
B. v2
C. v3
D. v4
解析:在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以
本文档预览:3600字符,共8496字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载