国家二级C++机试(类和对象)模拟试卷17
选择题
1.有如下头文件:
int fl();
static int f2();
c1ass MA{
public:
int f3();
static int f4();
};
在所描述的函数中,具有隐含的this指针的是( )。(C)
A. f1
B. f2
C. f3
D. f4
解析:此题考查的是this指针。tlus指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。题目中,只有f3()满足“类的菲静态成员函数”的要求,故应选C选项。
2.下列程序段中包含4个函数。其中具有隐含this指针的是( )。
int funl();
c1ass Test {
public:
int fun2();
friend intfun3();
static int fun4();
}(B)
A. funl
B. fun2
C. fun3
D. fun4
解析:this指针是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针知道自己属于哪一个对象。this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确的地表示出了成员函数当前操作的数据所属的对象。
3.下列关于this指针的描述中,正确的是( )。(D)
A. 类的成员函数都有this指针
B. 类的友元函数都有this指针
C. 任何与类相关的函数都有this指针
D. 类的非静态成员函数都有this指针
解析:this是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。它隐藏于每个类的非静态成员函数中。
4.有如下程序:
#inc1ude <iostream>
using namespacestd;
c1ass Test
{
public:
TestO {n+=2;}
~Test0{n—=3;}
static int getNum0 {return n;}
private:
static int n;
};
int Test::n=1;
int main()
{
Test* p=new Test;
delete p;
cout<<\\(A)
A. n=0
B. n=1
C. n=2
D. n=3
解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+—2”和“n——3”后n的值为0。
5.有如下程序:
#inc1ude <iostream>
using ruunespace std;
c1ass Obj{
static int i;
public:
Obj(){i++}
——Obj(){i——;}
static int getVal(){return i;}
};
int Obj::i=0;
void f(){Obj ob2; cout<<ob2.getVal();}
int main(){
Obj obl;
f();
Obj *ob3= new Obj; cout<<ob3—>getVal();
delete ob3; cOut<<Obj::getVal();
retutn 0;
}
程序的输出结果是( )。(D)
A. 232
B. 231
C. 222
D. 221
解析:此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0.在主函数中,首先定义了1个该类对象obl,所以构造函数被调用1次,i加1;然后调用函数f0,该函数中又定义了一个对象ob2,此时j再次加1变为2,然后通过函数getVal0输出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1:回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为l,输出1。故最终的输出结果是221。
6.有如下程序:
#inc1ude<iostream>
using namespace std;
c1ass MyClass{
public:
MyClass(){++count;)
~MyClass(){——count;)
static int getCount(){retum count;}
private:
static int count;
};
intMyClass::count0;
int main0{
MyClass obj;
cout<<obj.getCounto;
MyClass*ptr=new MyClass;
cout<<MyClass::getCount0;
delete ptr;
cout<<MyClass::getCount();
return 0;
}
程序的输出结果是( )。(A)
A. 121
B. 232
C. 221
D. 122
解析:此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了obj对象,其构造函数使静态数据成员count增l,故输出“1”;然后通过指针动态创建了MyClass类的对象,构造函数被再次调用,count变为2,输出“2”;接着删除创建的MyClass类的对象,调用析构函数,count减1变为1,输出“1”。故最终输出结果是121。
7.有如下类定义:
c1ass Point{
private;
static int how many;
};
____how many=0;
要初始化Point类的静态成员how_many,下划线处应填入的内容是( )。(C)
A. ing
B. static int
本文档预览:3600字符,共14538字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载