国家二级(C++)机试模拟试卷161
选择题
1.下列有关内联函数的叙述中,正确的是( )。(C)
A. 内联函数在调用时发生控制转移
B. 内联函数必须通过关键字inline来定义
C. 内联函数是通过编译器来实现的
D. 内联函数函数体的最后一条语句必须是return语句
解析:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,所以在调用时不发生控制转移。在类内部实现的函数都是内联函数,可以不用inline定义;只有函数外部定义的内联函数才必须加关键字inline。编译系统并非对内联函数必须使用内联,而且根据具体情况决定。内联函数不是必须要有返回值的。
2.下列关于this指针的描述中,正确的是( )。(D)
A. 类的成员函数都有this指针
B. 类的友元函数都有this指针
C. 任何与类相关的函数都有this指针
D. 类的非静态成员函数都有this指针
解析:this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用this指针。所以答案为D。
3.有如下类声明:
class SAMPLE
{
int n;
public:
SAMPLE(int i=0):n(i){}
void setValue(int n0);
};
下列关于getValue成员函数的定义中,正确的是( )。
B
解析:本题考查在类外定义类的成员函数,需要使用作用域限定符“::”,属于基础知识,本题答案为B。
4.有如下程序:
#include
using namespace std;
class Base1
{
public:
Basel(int d){cout<<d;}
~Basel(){}
}; i
class Base2
{
public:
Base2(int d){cout<<d;}
~Base2(){}
};
class Derived:public Base1,Base2
{
public:
Derived(int a,int b,int C,int d):Base1(b),Base2(a),b1(d),b2(C){}
private:
int b1:
int b2:
};
int main()
{
Derived d(1,2,3,4);
return 0;
}
执行这个程序的输出结果是( )。(D)
A. 1234
B. 2134
C. 12
D. 21
解析:本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出21。
5.下列叙述中正确的是( )。(D)
A. 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
B. 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C. 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D. 循环队列中元素的个数是由队头指针和队尾指针共同决定
解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态变化情况,所以B与C错误。
6.下列程序的输出结果是( )。
#include<iostrearn.h>
void main()
{int n[][3]={10,20,30,40,50,60};int(*p)[3];
p=n;cout<<p[0][0]<<’’,’’<<*(p[0]+1)<<’’,’’<<(*p)[2]<<endl;}(B)
A. 10,30,50
B. 10,20,30
C. 20,40,60
D. 10,30,60
解析:如果数组元素都是相同类型的指针,则称这个数组为指针数组。指针数组一般用于处理二维数组。声明的格式为:<数据类型><(*变量名)><[元素个数]>。p表示指向数组n的行指针,初始化“(*p)[3]=n;”,地址的等价形式:p+i、p[i]、*(p+i)都表示数组第i+1行的第1个元素的首地址。*(p+i)+j、p[i]+j、&p[i][j]都表示数组第i+1行、第j+1列元素的地址。值的等价形式:*(p+j)+j)、*(1)[i]+j)、p[i][j]都表示数组第i+1、第j+1列元素的值。所以本题中分别访问数组元素p[0][0],p[0][1],p[0][2]。
7.有以下程序段:
#include
#define MAX(x,y)(x)>(y)?(X):(y)
voidmain()
{
int ij,k;
i=10;
j=1 5;k=MAX(i,j)*10;
cout<<k<<endl;
}
程序执行后的输出结果是( )。(C )
A. 15
B. 100
C. 150
D. 10
解析:题目程序中的MAX函数是利用条件运算符为?:求最大值。即(x>y)?(x):(y)是当x大于y时取x,否则取y。当i=10,j=15时,“MAX(i;j”的值为15,所以“k–MAX(i’j)*10;”答案为:150。
8.下列说法中错误的是( )。(B)
A. 公有继承时基类中的public成员在派生类中仍是public的
B. 公有继承时基类中的private成员在派生类中仍是prirate的
C. 私有继承时基类中的public成员在派生类中是private的
D. 保护继承时基类中的public成员在派生类中是protected的
解析:此题考查的是继承时基类成员属性改变。选项B)中,公有继承时基类中的private成员在派生类中不是private的,而是不可访问的。所以选项B)错误;其他选项叙述均正确。
9.有如下程序:
#include
using namespace std;
class A{
public:
static int a;
void init(){a=1;}
A
本文档预览:3600字符,共15833字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载