国家二级(C++)机试模拟试卷519
选择题
1.有三个关系R、S和T如下:
(D)
A. 并
B. 自然连接
C. 笛卡尔积
D. 交
解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B错误。笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C错误。根据关系T可以很明显地看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D。
2.下面关于构造函数和析构函数的描述,错误的是( )。(D)
A. 析构函数中调用虚函数采用静态联编
B. 对虚析构函数的调用可以采用动态联编
C. 当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数
D. 构造函数可以声明为虚函数
解析:构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。
3.以下程序的输出的结果是( )。
#include
int x=3;
void main()
{
void fun();
int i;
for(i=1;i<x;i++)
fun();
}
void fun()
{static int x=1;
x*=x+1;
cout<<x<<\\(C)
A. 3,3
B. 2,2
C. 2,6
D. 2,5
解析:由主函数入手,在for循环中调用fun函数,其中调用次数为2次。fun中x为静态变量,有效到文件结束,所以第一次调用为x=x*(x+1)=1*(1+1)=2,第二次调用2*(2+1)=6。
4.有如下类定义:
class Point
{
int xx,yy;
public:
Point():xx(0),yy(0){}
Point(int x,int y=0):xx(x),yy(y){}
};
若执行语句
Point a(2),b[3],*c[4];
则Point类的构造函数被调用的次数是( )。(C)
A. 2次
B. 3次
C. 4次
D. 5次
解析:本题考查默认构造函数和带参数的构造函数,题目中定义一个对象a(2)以及对象数组b[3],共执行4次构造函数,对象指针不调用构造函数。所以本题答案为C。
5.有如下程序:
#include<iostream>
using namespace std;
class Base
{
pfivme:
void funl()const{cout<<”funl”;}
protected:
void fun2()const{cout<<”fun2”;}
public:
void fun3()coast{cout<<”fun3”;}
};
class Derived:protected Base
{
public:
void fun4()const{cout<<”fun4”;}
};
int main()
{
Derived obj;
obj.funl();//①
obj.fun2();//②
0bj.fun3();//③
obj.fun4();//④
return 0;
}
其中有语法错误的语句是( )。(B)
A. ①②③④
B. ①②③
C. ②③④
D. ①④
解析:本题考查保护继承中派生类对基类的访问属性,受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,保护基类的所有成员在派生类中都被保护起来,在类外不能访问,所以①②③错误。
6.下列关于this指针的叙述中,正确的是( )。(D)
A. 任何与类相关的函数都有this指针
B. 类的成员函数都有this指针
C. 类的友元函数都有this指针
D. 类的非静态成员函数才有this指针
解析:此题考查的是this指针的使用。类的每一个非静态成员函数都有一个隐含的常量指针,即this指针。类的静态成员函数不能含有this指针,因为this指针是一个指向本对象的指针。
7.在学校中,“班级”与“学生”两个实体集之间的联系属于( )关系。(B)
A. 一对一
B. 一对多
C. 多对一
D. 多对多
解析:一个班可以有多名学生,而一名学生只能属于一个班级,所以“班级”与“学生”两个实体集之间的联系属于一对多关系。
8.关于运算符重载,下列表述中正确的是( )。(C)
A. C++已有的任何运算符都可以重载
B. 运算符函数的返回类型不能声明为基本数据类型
C. 在类型转换符函数的定义中不需要声明返回类型
D. 可以通过运算符重载来创建C++中原来没有的运算符
解析:重载运算符的规则如下:
①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
②C++不能重载的运算符只有5个;
③重载不能改变运算符运算对象的个数;
④重载不能改变运算符的优先级和结合性;
⑤重载运算符的函数不能有默认的参数;
⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。故本题答案为C。
9.有如下程序段:
int i=0,j=1;
nt&r=i;//①
r=j;//②
int*p=&i;//③
*p=&r;//④
其中会产生编译错误的语句是( )。(A)
A. ④
B. ③
C. ②
D. ①
解析:本题考查指针和引用。①为引用,使用正确;④中&r表示一个地址,而*p已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。
10.有如下函数定义:
void fune(int a,int& b)
{a++;b++;}
若执行代码段:
本文档预览:3600字符,共16748字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载