2010年C++笔试试卷(A卷)答案&解析准完整版

更新时间:2023-11-23 02:15:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

考试中心填写: ____年___月___日 湖南大学课程考试试卷

一 二 三 四 五 六 七 八 九 十 总分 考 试 用 课程名称: 高等程序设计 ;课程编码: 试卷编号: ;考试时间:120分钟

题 号 应得分 一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。

由于学习股给的这两张试卷没有答案。所以是自己写了份参考的,我

专业班级: 已经尽量保证正确性。如果有错,希望大家指正。

1:由C++源程序文件编译而成的目标文件的缺省扩展名为( C )。 A. cpp B. exe C. obj D. lik 装 析:自己看自己的工程里头就有这个文件,obj是编译后的目标文件。即object. 订线

(2:函数重载是指( A )。 题 A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 目不 B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 得 C. 两个以上的函数名字不同,但形参的个数或类型相同 超过 D. 两个以上的函数取相同的函数名,并且函数的返回类型相同 此线

)3:下列特性中,( B )不是面向对象程序设计的特性。

A. 封装性; B. 完整性; C. 多态性; D. 继承性。

4:以下关于函数模板叙述正确的是( C )。 A. 函数模板也是一个具体类型的函数

B. 函数模板的类型参数与函数的参数是同一个概念

C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型

5:关于void 指针,下列说法正确的是( B )。 A. void 指针就是未指向任何数据的指针

B. 指向任何类型数据的指针可直接赋值给一个void 指针 C. void 指针就是已定义而未初始化的指针

姓名: 学号:

D. void 指针值可直接赋给一个非void 指针;

析:任何类型指针可以赋给void指针,而void指针在没有强制转换的情况下不能赋给其他类型的指针。

6:在基类中没有具体定义,但要求任何派生类都自已定义版本的虚函数是( C )。 A. 虚析构函数; B. 构造函数; C. 纯虚函数; D. 静态成员函数。 析:如果虚基类的派生类不重定义虚基类的纯虚函数,该派生类也将虚化。

7:以下各类函数中,( C )不是类的成员函数。

A. 构造函数; B. 析构函数; C. 友元函数; D. 拷贝初始化构造函数。

8:假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用( D )。 A. cout<<*s; B. cout<

9:有关析构函数的下述描述中,( D )是错误的。

A. 析构函数有且只有一个; B. 对象撤消时析构函数收回分配的内存空间; C. 析构函数无任何函数类型; D. 析构函和构造函数一样可以有形参。

10:私有静态成员变量只能用( C )来访问。

A、构造函数; B. 虚函数; C. 公有静态函数; D. 析构函数。 析:在vc6.0环境下,公有静态函数可以访问私有静态成员变量,普通成员函数也行! 11:假定变量a和pa定义为“double a[10], *pa=a;”,要将12.35赋值给a中的下标为5的元素,不正确的语句是( D )。

A. pa[5]=12.35; B. a[5]=12.35; C. *(pa+5)=12.35; D. *(a[0]+5)=12.35;

11、const int *p说明不能修改( B )。 A、p指针;

B、p指针指向的变量; C、p指针指向的数据类型; D、上述A、B、C三者;

12、一个类的友元不是该类的成员,与该类的关系密切,所以它( B )。 A. 有this指针,有默认操作的对象 B. 没有this指针,可以有默认操作的对象 C. 有this指针,不能执行默认操作

D. 没有this指针,也就没有默认操作的对象 析:前半句没问题,后半句可以质疑。。。

13、派生类的对象对它的基类成员中( A )是可以访问的。 A、公有继承的公有成员;

B、公有继承的私有成员; C、公有继承的保护成员; D、私有继承的公有成员;

14、C++中的虚基类机制可以保证:( D )。 A. 限定基类只通过一条路径派生出派生类

B. 允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类

C. 当一个类多次间接从基类派生以后,派生类对象能保留多份间接基类的成员 D. 当一个类多次间接从基类派生以后,其基类只被一次继承

析:这个涉及到多重继承交叉所产生的基类重复问题,虚继承正是为此而生的。这样就只会产生一个基类。

15、关于插入运算符<<的重载,下列说法不正确的是( B )。 A. 运算符函数的返回值类型是ostream & 。 B. 重载的运算符必须定义为类的成员函数。

C. 运算符函数的第一个参数的类型是ostream & 。 D. 运算符函数有两个参数。 16、假定K是一个类名,并有定义“K k; int j;”,已知K中重载了操作符(),且语句“j=k(3);”和“k(5)=99;”都能顺利执行,说明该操作符函数的原形只可能是( C )。 A. K operator ( ) (int); B. int operator ( )(int&); C. int & operator ( )(int); D. K &operator( )(int);

17、关于运算符重载,下列说法正确的是( B )。 A. 所有的运算符都可以重载。

B. 通过重载,可以使运算符应用于自定义的数据类型。 C. 通过重载,可以创造原来没有的运算符。 D. 通过重载,可以改变运算符的优先级。

18:建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为( C )的构造函数。

A. 自己所属类、对象成员所属类、基类 B. 对象成员所属类、基类、自己所属类 C. 基类、对象成员所属类、自己所属类 D. 基类、自己所属类、对象成员所属类

19、以下初始化工作错误的是( C )

A char name[] = ″mohd″ ; B char name[5] = ″mohd″ ; C char *name[5] = ″mohd″ ;

D char *name = ″mohd″ ;

20、现有:int a[5]={10, 20, 30, 40, 50};则( B )是以下语句的输出 for ( int i=0; i<4; i++ ) cout << ++*a << ″ ″ ; A 10 20 30 40 B 11 12 13 14 C 20 30 40 50 D an error will occur

二、填空题(1*12=12分)

1 若有定义“double a[3][5];”,则a 数组中行下标和列下标的最大值分别为___2____和_____4___

2、C++支持两种多态性:_____继承____时的多态性和_____重载函数 _____时的多态性。

3、若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____ 虚继承 ________的方式直接继承它

4、已知int cubin(int n){return n*n*n;}和double cubin(double n){return n*n*n;}是一个函数模板的两个实例,假定类型参数用T表示,则该函数模板的定义是_______________template T cubin (T n){return n*n*n}___________________。 5、派生类的成员函数可以直接访问基类的__ public,protected ______成员,不能直

接访问基类的__ _private____成员。

6、在一个类中定义拷贝构造函数的目的,是为了当利用该类的一个对象初始化另一个对象时,能够避免这两个对象的同一指针同时指向同一块__ _ _内存_____________。

7.为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义___ 析构函数 _________。

8. 假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]分别被初始化为____8___和____0____。

三、简单题(5*4=20分)

1、现有函数模板定义如下:

template T max(T t1, T t2) { return t1 > t2 ? t1 : t2 ; }

请问使用max(1,2.6)调用有何问题,如何解决?

T的类型将产生二义性。

把参数都定位同一类型或在模板里增加一类型T2。

2、#include 和 #include “filename.h” 有什么区别?

#include 将使编译器在库文件夹内寻找filename.h这个文件。

而#include “filename.h”将使编译器先在当前工程文件夹下寻找filename.h,如果没找到再到库文件夹内寻找

3、类的构造函数和析构函数的功能是什么?

顾名思义,构造函数用来构建新对象,并赋值给他们的数据成员。 析构函数则在当对象“过期”时负责清理对象。

4、在C++中,要实现运行时的多态,有哪些必要条件?

首先得要有继承关系,其次基类还要有虚函数并且子类重定义(注意是重定义而不是重载,不要把这两个概念混淆)了该虚函数,最后还必须通过指针或引用来调用虚函数。此三个条件都具备才能引发多态。

5、派生类对基类成员函数重载和派生类对基类成员函数覆盖的区别是什么?

重载将意味着被重载的函数和重载之的函数都有机会被调用,只要实参类型或个数与其中某一个函数的声明里提到的一致就可以。

而重定义意味着当多态机制发挥作用时,基类被重定义的函数将被“无视”(除非你用类名加作用域解析操作符显示调用基类被重定义的函数),将只调用派生类的。不再像重载那样根据参数类型及个数来决定调用哪个函数。

三、请写出以下程序的输出结果(5分) #include #include void main() { int a[8]={25,48,32,85,64,18,48,29}; int max,min; max=min=a[0]; for(int i=0; i<8; i++) { if(x>a[i]) max=a[i]; if(x

本文来源:https://www.bwwdw.com/article/x8gv.html

Top