国家二级(C++)机试模拟试卷288
选择题
1.下列关于this指针的描述中,正确的是( )。(D)
A. 类的成员函数都有this指针
B. 类的友元函数都有this指针
C. 任何与类相关的函数都有this指针
D. 类的非静态成员函数都有this指针
解析:this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用this指针。所以答案为D。
2.有如下类定义:
class Foo
{
public:
Foo(int v):value(v) { } //①
~Foo(){}//②
private:
Foo(){}//③
int value=0;//④
};
其中存在语法错误的行是( )。(D)
A. ①
B. ②
C. ③
D. ④
解析:本题考查对象的初始化,类的数据成员是不能在声明类时初始化的,所以本题答案为D。
3.若已定义
int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a数组元素不正确的引用是( )。(D)
A. a[p·a]
B. *(&a[i])
C. p[i]
D. a[10]
解析:数组有N个元素,则数组元素引用为a(0)~a(N.1),共计N个,没有a(10)这个元素,最后的元素是a(9)。
4.有如下程序:
#include<iostream>
using namespace std;
class TestClass{
static int i;
public:
TestClass(){i++;}
~TestClass (){i–;)
static int getVal0{return i;}
};
int TestClass::i=0;
void f(){TestClass obj2;cout<<obj2.getVal();}
int main(){
TestClass obj1;
f();
TestClass*obj3=new TestClass;cout<<obj3->getVal();
delete obj3;cout<<TestClass::getVa1();
return 0;
}
程序的输出结果是( )。(B)
A. 232
B. 221
C. 222
D. 231
解析:由于i是类TestClass的静态成员,该成员被类的所有实例共享。当定义obil时,系统自动调用构造函数TestClass(),i的值将加1;调用函数f()时,在定义obj2时系统会自动调用构造函数TestClass(),i的值将再加1;调用obj2.gotVal();后,将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数~TestClass(),i的值将减1;当定义obj3时,系统自动调用构造函数TestClass(),i的值将加1,调用cout<getVal();后,将i的值输出,输出值为2:调用delete obj3后将执行TestClass的析构函数~TestClass(),执行后,i的值将减1,TestClass::getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量i的值1。
5.关于在调用模板函数时模板实参的使用,下列表述中正确的是( )。(D)
A. 对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B. 对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C. 对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D. 对于常规参数所对应的模板实参,任何情况下都不能省略
解析:在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用\\
6.下面的描述中,正确的是 ( )。(A)
A. virtual可以用来声明虚函数
B. 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
C. 即使基类的构造函数没有参数,派生类也必须建立构造函数
D. 静态数据成员可以通过成员初始化列表来初始化
解析:在基类中用virtual声明成员函数为虚函数,所以A是正确的。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。
7.下列程序将x、Y和z按从小到大的顺序排列,横线处应添加语句( )。
template
Void fun()
{
T a:
if(x>y)
{
a=x;x=y;y=a;
)
if(y>z)
{
a=y;y=z;z=a;
}
if(x>y)
{
a=x;x=y;y=a;
}
}(C )
A. Tx,Ty,TZ
B. T x;y;z
C. T&x,T&y,T&z
D. T&x,&y,&z
解析:函数fun的类型为void没有任何返回值,函数中变量的改变,即参数的改变应该影响实参。应该是地址传递方式,即把引用型作为函数形参。类T是类的抽象,可以利用模板建立各种数据类型的类。所以补全函数的定义为“T&x,T&yT&z”。
8.有如下程序:
#include<iostream>
using namespace std;
class Point{
public:
static int number;
public;
Point(){number++;}
~Point(){number–;}
};
int Point::number=0;
int main(){
Point*ptr;
Point A,B;
{
Point*ptr_point=new Point[3];
ptr=ptr_point;
}
Point C;
cout<<Point::number<<endl:
delete[]ptr;
return0;
}
本文档预览:3600字符,共20618字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载