1、华侨大学 面向对象程序设计(二) 试卷B 班 级 学 号 姓 名 成 绩 注意:请将所有答案写在答卷上! 一、填空题(15分,每小题1分) 1. 如果用户自定义的函数在调用点之后再定义,则在调用点之前,必须用(1)对被调函数进行说明。 2. 函数的递归调用可以有直接递归调用和(2)递归调用。 3. 静态全局变量的作用域是(3) 。 4. 若将某函数定义为静态型(static),则
2、该函数只能被(4)所调用。 5. main(int argc,char *argv[]))函数中的参数argv用于(5) 。 6. (6)提供了一种在程序内和程序之间组织和使用名称的技术。 7. 用“const 类型标识符& 引用名=目标变量名;”声明引用,此处const的含义是(7) 。 8. C++语言中,(8)定义一个结构体类型,该结构类型中包含指向自身结构类型的指针成员。(填“可以”或“不可以”) 9. 若有类型定义“typedef char STRING[80]; STRING s;”,则s的类型为(9) 。 10. 类的对象可以直接访问类中的(10)成员。(priva
3、te/protected/public) 11. 在定义类时,若没有为类提供析构函数,则编译系统会自动为该类创建一个默认的析构函数,其形式为(11) 。 12. 拷贝构造函数的功能是实现对象值的拷贝,通过将一个同类对象的值拷贝给一个新对象,来完成对新对象的初始化。定义一个拷贝构造函数的方式是(12) 。 13. 当希望一个类(如A)可以存取另一个类(如B)的私有成员时,可以将该类(A)声明为另一类(B)的友元类,友元类(A)的所有成员函数都可视为该类(B)的(13)函数。 14. 在静态成员函数的实现中不能直接引用类中说明的非静态成员,但可以引用类中说明的(14)成员。 15. C+
4、支持两种不同类型的多态:一种是编译时的多态,另一种是(15)时的多态。 二、选择题(18分,每小题2分) 1. 进行文件操作时,需要包含(1)_文件。 A) iostream B) fstream C) stdio.h D) stdlib.h 2. 若有定义:enum Weekday { sun=7,mon=1,tue,wed,thu,fri,sat }day;,以下正确的语句是(2) 。 A) mon++; B)int k=mon+1; C) day=7; D)day++; 3. 若有定义:int (*p)(int,int); ,
5、则错误的叙述是(3) 。 A) p是一个指向返回值类型为int,带有两个int型参数的函数的指针 B) 该类型的变量p可以作为另外一个函数的参数 C) 若已定义了函数int Sum(int x,int y),则p可以指向函数Sum。 D) p可以作自增运算p++ 4. 若已有定义:struct Student{ char *name,int age,float mark;}s[8]; Student* p=s;,以下语句(组),正确的是(4) 。 A) cin>>s[0].name>>s[0].age>>s[0].mark; B) cin>>p->age>>p->mark
6、p->name="Liuhua"; C) s[1].name=new char[10];strcpy(p->name, "Liuhua"); D) p->name=new char[10]; strcpy(p->name, "Liuhua"); 5.若有定义:int a,b;,下面引用变量的声明中,(5)是正确的。 A) int& ra=a; int& &rra=ra; B) int& y=10; C) int& z=int; D) int &x=a; int &y=b; 6. 对于下面定义
7、的类Myclass,在函数f中可以将对象obj的成员data值修改为50的语句是(6)。 class Myclass{ public: Myclass(int x){ data=x; } void SetNum(int value){ data=value; } private: int data; }; void f(void){ Myclass obj(45),*ptr=&obj; (6) } A) obj.data=50; B)obj.Myclass(50); C)ptr->SetNum(50
8、); D)ptr->data=50; 7.下面叙述正确的是(7) 。 A) 基类的protected成员不能被派生类的成员函数访问 B) 基类的public成员能被派生类的对象直接访问 C) 基类的protected成员在派生类中可能是privated的 D) 基类的private成员不能被基类的成员函数访问 8. 构造函数不具备的特征的是 (8) 。 A) 构造函数的函数名与类名相同 B)构造函数可以重载 C) 构造函数必须有返回值类型 D)构造函数可以设置默认参数 9. 下面叙述错误的是(9) 。 A) 基类指针可以指向派生类对象
9、 B) 基类指针可以指向基类对象
C) 派生类指针可以指向派生类对象 D) 派生类指针可以指向基类对象
三、阅读程序题(45分)
1.阅读下面程序,给出程序的运行结果。(15分,每小题5分)
1)
#include 10、d){
int a=1,b=2,c=3;
Fun(a,&b,c);
cout<<"a="<
using namespace std;
void P(int w){
if (w==0) return;
P(w-1);
cout< 11、
using namespace std;
void print(int,int,int (*p_fun)(int,int));
int add(int,int);
int substract(int,int);
void main(void){
int a=10,b=-20,Choice;
int(*p)(int,int);
cout<<"Enter your choice:";
cin>>Choice;
switch(Choice){
case 1: p=add; break;
default: p=substract 12、
}
print(a,b,p);
}
int add(int x,int y){ return x+y; }
int substract(int x,int y){ return x-y; }
void print(int i,int j,int (*p_fun)(int,int)){
cout<<"The result is "< 13、pace std;
struct Student{
int num;
char name[20];
char sex;
int age;
};
void main(void){
Student* Fun(Student *,int);
Student stu[]={ {11,"lilin",'M',18},{3,"sunny",'M',24},
{2,"zhao",'M',20}, {4,"Liu yanhong",'F',30} };
int size=sizeof(stu)/sizeof(Student);
Stude 14、nt *p=Fun(stu,size);
cout< 15、完成相同的功能,给出源程序中其它需要修改的语句并作相应的修改。
2)(6分)
#include 16、ame,n);
}
~Student(){
cout<<"destructing..."< 17、tream>
using namespace std;
class Point{
private:
char *name;
float X,Y;
public:
Point(char* s,float a,float b){
X=a;Y=b;
name=new char[strlen(s)+1];
strcpy(name,s);
cout<<"Initializing Point: "< 18、);
float GetX(){ return X; }
float GetY(){ return Y; }
void Show(){ cout<<"name:"< 19、oat x1,float y1,char* p2name,float x2,
float y2):p1(p1name,x1,y1),p2(p2name,x2,y2){
cout<<"Line constructor."< 20、 cout<<"Coping Point: "< 21、 std;
class Base{
public:
int Bvalue;
Base(int v){
Bvalue=v;
cout<<"Base constructor."< 22、rn D1value; }
};
class D:public D1{
public :
int Dvalue;
int getDvalue(){ return Dvalue; }
D(int v1,int v2,int a):D1(v1,v2){
Dvalue=a;
cout<<"D constructor."< 23、out< 24、 //分母
public:
FractionalNumber(int n=0,int d=1){ //完成构造函数的实现(5分)
?
}
~FractionalNumber(){
cout<<"Destructor is called."< 25、"< 26、mber& num1,
FractionalNumber& num2); //友元函数的声明
};//类定义结束
FractionalNumber operator+(FractionalNumber& num1,FractionalNumber& num2){
int nresult,dresult;
dresult=num1.denominator*num2.denominator;
nresult=num1.numerator*num2.denominator+
num1.denomi 27、nator*num2.numerator;
return FractionalNumber(nresult,dresult);
}
void main(void){
//设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分)
?
}//end of main()
华侨大学 面向对象程序设计(二) 答卷
姓 名 学号 成绩
一、填 28、空题(15分,每小题1分)
(1) (2) (3)
(4) (5) (6)
(7) (8) (9)
(10) (11) (12)
(13) (14) 29、 (15)
二、选择题(18分,每小题2分)
(1) (2) (3) (4) (5)
(6) (7) (8) (9)
三、阅读程序题(45分)
1.阅读下面程序,给出程序的运行结果。(15分,每小题5分)
1) 运行结果:
2)运行结果:
3)运行结果:
2.阅读下面程序,回答相关问 30、题。(30分)
1)(7分)
a) (3分)函数Fun()的功能:
b) (4分)需要修改:
2)(6分)
a)(4分)运行结果:
b)(2分)
3)(9分)
a)(6分)运行结果:
b) (3分)
4)(8分)
1)(6分)运行结果:
2)
四、编程题(22分)
1. 一个简单分数类的结构如下,请补充相应代码,使之完成程序功能。
int gcd(int m,int n){ //(1)完成求两 31、个数的最大公因数(5分)
}
FractionalNumber(int n=0,int d=1){ //完成构造函数的实现(5分)
}
void add(const FractionalNumber& x){ //分数的加法(5分)
}
void main(void){
//设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分)
32、
}//end of main()
参考答案
一、填空题(15分,每小题1分)
(1)函数原型 (2)间接 (3)定义它所在的源程序文件 (4)定义该函数的源程序所在文件的其他函数 (5)指针数组中各元素分别指向命令行中的各个字符串(6)命名空间
(7)引用的目标变量是常量 (8)可以 9.字符数组 10.public 11.~类名{} 12.类名(const 类名& 对象名){…} 13.友元函数 14.静态 15.运行
二、选择题(18分,每小题2分)
(1)B (2)B (3)D (4) 33、D (5)D (6)C (7)C (8)C (9)D
三、阅读程序题(45分)
1.阅读下面程序,给出程序的运行结果。(15分,每小题5分)
1)
2) 1 2 1 3 1 2 1
3)
2.阅读下面程序,回答相关问题。(30分)
1)(7分)
a)函数返回最大学号的学生指针;
b)需要修改的地方:
Student& Fun(Student *,int);//修改1
Student p=Fun(stu,size); //修改2
cout< 34、
return s[index];//修改4
2)(6分)
a)
b)去掉语句后,结果不同:
3)(9分)
a)
b)
拷贝构造函数Point(Point &p)实现点类对象的拷贝。不能去掉该函数。否则会因“浅拷贝”出现异常。
4)(8分)
a)
b) 可以。
四、编程题(22分)
1. 一个简单分数类的结构如下,请补充相应代码,使之完成程序功能。
int gcd(int m,int n){ //求最大公因数-------------------5分
if(m%n==0) return n;
return gcd(n,m%n);
}
35、
FractionalNumber(int n=0,int d=1){ //完成构造函数的实现---5分
numerator=n;
denominator=d;
Simplify();
cout<<"Constructor is called."< 36、enominator=b*d;
Simplify();
}
void main(void){
//设计测试程序,创建类对象,使用output()、add()和运算符‘+’(7分)
FractionalNumber f1(10,50),f2(2,10),f3(20,5);
f1.Output(); f2.Output();f3.Output();
cout<<"-----------------"<






