二级C++选择题专项强化真题试卷6
选择题
1.有如下类定义
class MyClass
public:
Private:
int data;
};
若要为MyClass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClass类的对象obj,则横线处的声明语句应为( )。
A) friend istream& operator>>(istream& is, MyClass&A);
B) friend istream& operator>>(istream& is, MyClassA);
C) istream& operator>>(istream& is, MyClass&A);
D) istream& operator>>(istream& is, MyClassA);
(A)
A.
B.
C.
D.
解析:
2.线性表L=(a1,a2,a3,…ai,…an),下列说法正确的是(D)
A. 每个元素都有一个直接前件和直接后件
B. 线性表中至少要有一个元素
C. 表中诸元素的排列顺序必须是由小到大或由大到小
D. 除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件
解析:线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。
3.以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是
#include
void main()
{ int *p,*q,a,b;
p=&a;
cout<<\\(B)
A. *p表示的是指针变量p的地址
B. p表示的是变量a的地址,而不是变量a的值
C. *p表示的是指针变量p的值
D. *p只能用来说明p是一个指针变量
解析:p表示的是变量a的地址,定义后*p表示的是变量a的值。
4.已知函数f的原型是:voidf(int*a,long &B) ;,变量v1、v2;的定义是int v1;long v2;正确的调用语句是 (C)
A. f(V1,&V2);
B. f(v1,v2);
C. f(&v1,v2);
D. f(&v1,&v2);
解析:本题考核形式参数与实在参数,参数值的传递。第一个参数是地址传递,所以在调用时要传入实参的地址,第二个参数引用传递,调用时直接写上实参即可。
5.在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员的函数重载的运算符。下列叙述中正确的是(C)
A. operator+有两个参数,operator*有两个参数
B. operator+有两个参数,operator*有一个参数
C. operator+有一个参数,operator*有两个参数
D. operator+有一个参数,operator*有一个参数
解析:本题考查运算符重载。运算符可重载为成员函数,也可重载为友元函数。当重载为成元函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个,当重载为友元函数时,其参数个数应与操作数个数相同。
6.有如下程序: #include<iostream> using namespace std; int main() { int *p; *p=9; cout<<\\(D)
A. 编译时出现语法错误,不能生成可执行文件
B. 运行时一定输出:The value at p:9
C. 运行时一定输出:The value at p:*9
D. 运行时有可能出错
解析:本题考查的是指针的运用。在使用任何指针变量之前必须先给它赋一个所指合法具体对象的地址值。本题中,在给*p赋值前,指针变量p并没有指向一个具体对象。此时可以通过编译,但运行时由于p中为随机值,该赋值可能会破坏内存中某个重要的地址空间中的内容,导致程序运行出错。故应该选择D。
7.有如下类定义: class AA { int a; public: int getRef()const{return &a;} //① int getValue()const{return a;) //② void set(int n)const{a=n;} //③ friend void show(AAaa)const{cout<<a;} //④ }; 其中的四个函数定义中正确的是(B)
A. ①
B. ②
C. ③
D. ④
解析:本题考查了常成员函数和友员函数的一些概念。getRef()函数返回的是a的地址值&a,而函数类型却定义为int,C++中不允许隐式的将一个地址值类型转换为int类型,故选项A不正确。set()函数被定义为常成员函数,但在函数中给a赋值,改变了数据成员的值这是不允许的,故选项C错误。show()函数被定义为AA类的友员函数,它不属于AA类而是一个全局函数。所以同时被定义为常成员函数是错误的。所以选项D不正确。故应该选择B。
8.有如下类定义: class Point { int x_,y_; public: Point():x_(0),y_(0){} Point(int x,int y=0):x_(x),y_(y){} }; 若执行语句 Point a(2),b[3],*c[4]; 则Point类的构造函数被调用的次数是(C)
A. 2次
B. 3次
C. 4次
D. 5次
解析:本题考查的知识点是类的构造函数。构造函数在对象被创建的时候由系统自动调用。在Point a(2),b[3],*c[4];语句中:a(2)是定义一个对象并传入构造参数2,所以此时会调用1次构造函数:b[3]是定义一个包含3个对象的数组,所以构造函数会被调用3次;而*c[4]定义的是一个包含4个Point类对象指针的数组,它并没有创建任何Point对象,故构造函数一次也不会被调用。故应该选择C。
9.有如下类定义: class 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不正确。常
本文档预览:3600字符,共9665字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载