国家二级C++机试(类和对象)模拟试卷14
选择题
1.下列关于this指针的描述中,正确的是( )。(D)
A. 类的成员函数都有this指针
B. 类的友元函数都有this指针
C. 任何与类相关的函数都有this指针
D. 类的非静态成员函数都有this指针
解析:this是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象,它隐藏于每个类的非静态成员函数中。
2.有如下程序:
#include<iostream>
using namespace std;
class Test
{
public:
Test() {n+=2;}
~Test(){n-=3;}
static int getNum0{return n;}
private:
static int n;
};
int Test::n=1;
int main()
{
Test*p=new\\(A)
A. n=0
B. n=1
C. n=2
D. n=3
解析:此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员n的运算具有叠加性,执行“n+=2”和“n-=3”后n的值为0。
3.有如下程序:
#include<iostream>
using namespace std;
class Obj{
static int i;
public:
Obj(){i++;}
~Obj(){i–;}
static hat getVal(){return i;}
};
int Obj::i=0;
void f(){Obj ob2;cout<<ob2.getVal();}
int main(){
Obj ob1;
f();
Obj*ob3=new Obj;cout<<ob3->getVal q();
delete ob3;cout<<Obj::getVal();
return 0;
}
程序的输出结果是( )。(D)
A. 232
B. 231
C. 222
D. 221
解析:此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0在主函数中,首先定义了1个该类对象ob1,所以构造函数被调用1次,i加1;然后调用函数f(),该函数中又定义了一个对象ob2,此时i再次加1变为2,然后通过函数getVal()揄出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1;回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为1,输出1。故最终的输出结果是221。
4.有如下程序:
#include<iostream>
using namespace std;
class MyClass{
public:
MyClass(){++count;}
~MyClass(){–count;}
static int getCount(){return count;}
private:
static int count;
};
int MyClass::count=0;
int main() {
MyClass obj;
cout<<obj.getCount();
MyClass*ptr=new MyClass;
cout<<MyClass::getCount();
delete ptr;
cout<<MyClass::getCount();
return 0;
}
程序的输出结果是( )。(A)
A. 121
B. 232
C. 221
D. 122
解析:此题考查的是静态成员。静态成员的特性是不管这个类创建了多少对象,它的静态成员都只有一个拷贝副本,这个副本被所有属于这个类的对象共享。题目中,首先定义了obj对象,其构造函数使静态数据成员cout增1,故输出“1”;然后通过指针动态创建了Myclass类的对象,构造函数被再次调用,count变为2,输出“2”;接着删除创建的MyClass类的对象,调用析构函数,count减1变为1,输出“1”。故最终输出结果是121。
5.有如下类定义:
class Point{
private;
static int how_many;
};
__how_many=0;
要初始化Point类的静态成员how_many,下划线处应填入的内容是( )。(C)
A. ing
B. static int
C. int Point::
D. static int Point::
解析:此题考查的是静态数据成员的初始化。静态数据成员应在类体外进行初始化,且初始化的一般格式为:数据类型类名::静态数据成员名=初始值。
6.有如下类和对象的定义:
class Constants {
public;
static double getPl(){return 3.1416;}
};
Constants constants;
下列各组语句中,能输出3.1416的是( )。(D)
A. cout<<constants->getPI();和cout<<Constants::gerPI();
B. cout<<constants.getPI();和cout<<Constants.getPI();
C. cout<<constants->getaI();和cout<<Constants->getPI();
D. cout<<constants.getPI();和cout<<Constants::getPI();
解析:此题考查的是静态成员函数的引用。getPI()是类C0nstants的静态成员函数。引用静态成员函数可以有两种形式:一是通过类名直接进行调用,例如类名::静态成员函数名;另一种是用类的任何对象名进行调用其作用仅是通过对象名间接的指出类名,例如constants.getPI()选项D即是这种调用方式。
7.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为( )。
本文档预览:3600字符,共12020字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载