(32)建立一个有成员对象的派生类对象时,各构造函数体的执行次序为(C)。 A)派生类、成员对象类、基类 B)成员对象类、基类、派生类 C)基类、成员对象类、派生类 D)基类、派生类、成员对象类
(33)如果表达式 a>=b 中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为(A)。
A)a.operator>=(b) B)b.operatotr>=(a) C)operator>=(a,b) )operator>=(b,a) (34)当使用 ofstream 流类定义一个流对象并打开一个磁盘文件时,文件的默认打开方式为(B)。 A)ios base::in B)ios_base::binary C)ios_base::in|ios_base::out D)ios_base::out (35)在一个抽象类中,一定包含有(C)。
A)虚函数 B)纯虚函数 C)模板函数 D)重载函数 二、填空题(每空2分,共30分)
(6)当使用关键字__void__作为函数返回类型时,该函数不返回任何值。
(7)已知数组 a 中有 n 个元素,下列语句将数组 a 中从下标 x1 开始的 k 个元素移动到从下标 x2 开始的 k 个元素中,其中 0<=x1
int fun1(int x) {return++x;} int fun2(int &x) {return++x;} int main(){ int x=1,y=2; y=fun 1(fun2(x)); cout< 程序的输出结果是_2,3_。 (9)有如下程序: #include pumpkin(){++count;} ~pumpkin(){--count;} static void total_count(){ cout< private: static int count; }; int pumpkin::count=0; int main(){ 11 pumpkin pl[10]; pumpkin::total_count(); return 0; } 这个程序的输出结果是__10pumpkin(s)__。 (10)有如下递归函数: int Fun(int n){ if(n<=1) return 1; __else return n*Fun(n-1);__ } 请补充完整,使得函数 Fun 能够正确计算形参 n 的阶乘。 (11)请在下列程序中的空格处填写正确的语句: class Sample{ public: Sample(){} ~Sample(){} void SetData(int data) { //将 Sample 类成员变量 data 设置成形参的值 __Sample::data=data__ //注意形参与成员同名 } private: int data; }; (12)有如下类定义,请将Sample类的拷贝构造函数补充完整。 class Sample{ public: Sample(){) ~Sample() {if(p) delete p;) Sample (const Sample& s){ __p=new int;*p=s.*p__ } void SetData(int data) {p=new int(data);} private: int*p; }; (13)重载加法运算符“+”,其函数名是__operator +_。 (14)有如下程序: #include Wages(double CBase, double CBonus, 12 double CTax) :base(CBase), bonus(CBonus), tax(CTax){} double getPay()const; //返回应付工资额 Wages operator+(Wages w)const; //重载加法 }; double Wages::getPay()const {return base+bonus-tax;} Wages Wages::operator+(Wages w)const { return Wages(base+w.base, bonus+w.bonus, tax+w.tax); } int main(){ Wages wl(2000,500,100),w2(5000,1000,300); cout<<(wl+w2).getPay()< }(15)有如下程序: #include char name[10]; public: Pet(char*name){strcpy(this->name, name);} const char*getName()const {return name;} virtual void call()const=0; }; class Dog: public Pet{ public: Dog(char*name):Pet(name){} void call()const{cout<<\汪汪叫\}; class Cat:public Pet{ public: Cat(char*name):Pet(name){} void call()const{cout<<\喵喵叫\}; int main(){ Pet *pet1=new Dog(\哈克\ *pet2=new Cat(\吉米\cout< cout< 13 cout< 程序的输出结果是__哈克汪汪叫__ __吉米喵喵叫__ 2008年9月二级 C++笔试试卷参考答案 二、填空题 (6)void (7)X2+k-1 (8)2,3 (9)10pumpkin(s) (10)else return n*Fun(n-1); (11)Sample::data (12)p=new int; *p=s.*p; (13)operator + (14)8100 2009年9月全国计算机二级笔试C++ 一、选择题(1-10,21-40每题2分,11-20每题1分) (11)已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则 D A)FA必须定义在FB之前 B)FB必须定义在FA之前 C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前 D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前 (12)有如下两个类定义 C class AA{}; class BB{ AA v1,*v2; BB v3; int *v4; }; 其中有一个成员变量的定义是错误的,这个变量是 A)v1 B)v2 C)v3 D)v4 由于AA和BB都是类的定义,在类定义中无法声明一个自己的对象,所以在BB的类定义中,企图声明一个BB类的对象,是非法的。 (13)有如下类定义: B class XX{ int xdata; public: XX(int n=0) : xdata (n) { } }; class YY : public XX{ int ydata; public: YY(int m=0, int n=0) : XX(m), ydata(n) { } }; YY类的对象包含的数据成员的个数是 A)1 B)2 C)3 D)4 (14)下列有关运算符函数的描述中,错误的是 C A)运算符函数的名称总是以operator为前缀 14 B)运算符函数的参数可以是对象 C)运算符函数只能定义为类的成员函数(友元函数) D)在表达式中使用重载的运算符相当于调用运算符重载函数 (15)下列关于模板形参的描述中,错误的是 B A)模板形参表必须在关键字template之后 B)模板形参表必须用括弧( )括起来 C)可以用class修饰模板形参 D)可以用typename修饰模板形参 (16)在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是 A A)ios_base::cur B)ios_base::beg C)ios_base::out D)ios_base::end (17)下列字符串可以用作C++标识符的是 D A)2009var B)goto C)test - 2009 D)_123 (18)下列枚举类型的定义中,包含枚举值3的是 A A)enum test {RED, YELLOW, BLUE, BLACK}; B)enum test {RED, YELLOW=4, BLUE, BLACK}; C)enum test {RED=-1, YELLOW,BLUE, BLACK}; D)enum test {RED, YELLOW=6, BLUE, BLACK}; (19)有如下程序段: C int i=1; while (1) { i++; if(i == 10) break; if(i%2 == 0) cout << '*'; } 执行这个程序段输出字符*的个数是 A)10 B)3 C)4 D)5 (20)已知数组arr的定义如下: D int arr[5] = {1,2,3,4,5}; 下列语句中输出结果不是2的是 A)cout << *arr+1 < (21)计算斐波那契数列第n项的函数定义如下:B Int fib(int n){ if (n == 0) return 1; else if (n == 1) return 2; else return fib(n-1)+fib(n-2); } 若执行函数调用表达式fib(2),函数fib被调用的次数是 A)1 B)2 C)3 D)4 (22)Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是 D Sample a[2], *p = new Sample; A)0 B)1 C)2 D)3 (23)下列关于虚基类的描述中,错误的是 C A)使用虚基类可以消除由多继承产生的二义性 15