国家二级C++机试(类和对象)模拟试卷14
(总分:54.00,做题时间:90分钟)
一、 选择题(总题数:27,分数:54.00)
1.下列关于this指针的描述中,正确的是( )。
(分数:2.00)
(分数:2.00)
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"rest; delete p; tout<<''n=''<<Test::getNum()<<end1; return 0; } 执行后的输出结果是( )。
(分数:2.00)
(分数:2.00)
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; } 程序的输出结果是( )。
(分数:2.00)
(分数:2.00)
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; } 程序的输出结果是( )。
(分数:2.00)
(分数:2.00)
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,下划线处应填入的内容是( )。指向类成员函数的指针
(分数:2.00)
(分数:2.00)
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的是( )。
(分数:2.00)
(分数:2.00)
&ut<<constants->getPI();和cout<<Constants::gerPI();
&ut<<constants.getPI();和cout<<Constants.getPI();
&ut<<constants->getaI();和cout<<Constants->getPI();
&ut<<constants.getPI();和cout<<Constants::getPI(); √
解析:解析:此题考查的是静态成员函数的引用。getPI()是类C0nstants的静态成员函数。引用静态成员函数可以有两种形式:一是通过类名直接进行调用,例如类名::静态成员函数名;另一种是用类的任何对象名进行调用其作用仅是通过对象名间接的指出类名,例如constants.getPI()选项D即是这种调用方式。
7.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为( )。
(分数:2.00)
(分数:2.00)
A.a √
B.AA.a
C.a{}
D.AA::a{}
解析:解析:类AA的成员函数直接引用类AA的非静态数据成员。
8.有如下类定义: class Sample{ public; Sample(int x):ref(x){} //① private:Sample():ref(0){} //② static int val=5; //③ const int ref; //④};上述程序段中,错误的语句是( )。
(分数:2.00)
(分数:2.00)
A.①
B.②
C.③ √
D.④
解析:解析:静态整型数据不能定义为类的数据成员。
9.已知类Myclass的定义如下 class MyClass { public: void function1(MyClass&c){cout<<c.data;} static void function2(MyClass&c){cout<<c.data;} void function3(){cout<<data;} staric void function4(){cout<<data;} private: int data; }; 其中有编译错误的函数是( )。
(分数:2.00)
(分数:2.00)
A.function1
B.function2
C.function3
D.functicIn4 √
解析:解析:funcyion4()函数作为类的静态成员函数,不能直接访问类中说明的非静态成员,即cout<<data在编译时会出错。
10.有如下程序: #include<iostream> using namespace std; class XA{ im a; public: static int b; XA(int aa):a(aa){b++;} int getA(){return a;} }; int XA::b=0; int main() { XA d1(4),d2(5); cout<<d1.getA()+d2.getA()+XA::b+d1.b<<end1; return 0; } 运行这个程序的输出结果是( )。
(分数:2.00)
(分数:2.00)
A.9
B.11
C.13 √
D.15
解析:解析:在类XA的构造函数中,定义了用成员变量a的值初始化变量aa,同时静态成员变量b值加1。所以当在主main函数中定义类xA的对象d1(4)后,变量b的等于1,定义对象d2(5)后,变量b的值等于2,所以表达式d1.getA()+d2.getA()::b+d1.b等于4+5+1+2+1=13。
11.由于常对象不能被更新,因此( )。
(分数:2.00)
(分数:2.00)
A.通过常对象只能调用它的常成员函数 √
B.通过常对象只能调用静态成员函数
C.常对象的成员都是常成员
D.通过常对象可以调用任何不改变对象值的成员函数
解析:解析:此题考查的是常对象与常成员函数的概念。使用const关键字修饰的对象称为常
对象,它不能被更新,所以常对象只能调用常成员函数而不能调用其它成员函数;使用const关键字声明的成员函数是常成员函数,它也不能被更新,常成员函数只能调用常成员函数而不能调用其它函数。
12.有如下程序 #include<iostream> using namespace std; int i=1; class Fun{ public: static int i; int value(){return i-1;} int value()const{return i+1;} }; int Fun::i=2; int main(){ int i=3; Fun fun1; const Fun fun2; return 0; } 若程序的输出结果是: 123 则程序中下划线处遗漏的语句是( )。
(分数:2.00)
(分数:2.00)
&ut<<fun1.value()<<Fun::i<<fun2.value(); √
&ut<<Fun::i<<fun1.value()<<fun2.value();
&ut<<fun 1.value()<<fun2.value()<<Fun..:i;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论