号学 名纸姓 卷 试 试 级考班 学 计大设业程序工象对南向湖面 名称程课 院学通信与算机计 )院(系 ————课程名称: 面向对象程序设计 ( A卷 闭卷) 1.下列关于iostream的描述中,错误的是( )。 A.它是标准的C++头文件 B.它与iostream.h是两个不同文件 ——C.iostream与iostream.h文件形式不同,但其内容实现是一样的 — 适用专业年级:计算机14级 考试时间: 100分钟 D.C++标准不再支持iostream.h文件 —题号 一 二 三 四 五 六 七 八 九 十 总分 2.如果Student是学生类,则语句“Student *p,s1, s2[2];”会执行Stuent的构造统分人签名 题分 10 20 24 26 20 100 函数次数是( )。 ———A.1 B.2 C.3 D.4 —得分 3.在重载一个运算符时,其参数表中没有任何参数,则下列描述中正确的是( )。 ——考生注意事项:1、本试卷共 3 页,试卷如有缺页或破损,请立即举手报告以便更换。 A.作为友元函数重载的一元运算符 B.作为成员函数重载的一元运算符 — 2、考试结束后,考生不得将试卷、答题纸和草稿纸带出考场。(答案请写C.作为普通函数重载的一元运算符 D.上述三种说法都是错误的 在密封线内和答卷正面,否则不记分) 4.下列关于C++异常处理的流程的描述中,错误的是( )。 ——一、判断题,正确的打√,错误的打×(每小题1分,共10分) A.对某段可能产生异常的代码或函数使用try结构进行检测 (答案填在下表中) B.如果在执行try结构期间没有引起异常,则跟在try后面的catch结构不会执—— —1 2 3 4 5 6 7 8 9 10 行C.如果在执行try结构期间发生异常,则在异常发生的位置使用throw抛出异常,√ × × √ × √ × × √ × 一个异常对象将被创建 ——线1.在C++中,标识符Student和_student都是正确的。( ) D.本层try语句抛出了异常,只能由本层的catch语句处理 封2. 在编程中,有了面向对象的程序设计方法后,就不要用面向过程的程序设计方法了。5.一个类的静态数据成员所表示属性( )。 密( ) A. 是类或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 是类和友元的属性 3. 语句“int (*p)(int x, int y);”说明了p是一个指向整数的指针。( ) ——6.C++中虚基类机制可以保证,( )。 —4.能访问一个类CMyClass中的private成员的可以是类CMyClass的成员函数、友元函A.限定基类只通过一条路径派生出派生类 数或友元类中的函数。( ) B.允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类 ——5.类的构造函数和析构函数一般都声明为虚函数。( ) C.当一个类多次间接从基类派生后,派生类对象能保留多份间接基类的成员 ——6.设函数fun( )是一个不属于任何类的普通函数,则在调用该函数时可以使用fun();方D.当一个类多次间接从基类派生后,其基类只被一次继承 式,或者使用::fun();方式来调用。( ) 7.如果c是一个复数类对象,为了能使语句“double d = 5.5 + c;”正确执行,只7.抽象类不会产生实例,所以不需要有构造函数。( ) 采用下列( )方法就可以。 ———8.引用实际上是隐式的指针,和指针是同一种数据类型。( ) A.定义一个重载+运算符的复数类成员函数 B.定义一个复数类转换构造函数 —C.定义一个重载+运算符的复数类友元函数 D.定义一个复数类类型转换函数 9.在MFC编程中,视图/文档类程序是通过OnDraw()函数进行进行输出的。( ) 8.一个类的析构函数通常被定义为该类的( )成员。 ——10.使用MFC编程时,可以用 Invalidate(TRUE);语句来实现把控件中数据放入对应的变A.私有 B.保护 C.友元 D.公有 —量中。( ) 9.以下哪个基类中的成员函数表示纯虚函数? ( ) —— A.virtual void fun()=0 B. void fun(int) = 0 二、单项选择题(每小题2分,共20分)(答案填在下表中) C.virtual void fun(int) D. virtual void fun(int){} —— 10.关于const型数据的描述,正确的是( )。 —1 2 3 4 5 6 7 8 9 10 A.常对象中不能定义常数据成员 B.常成员函数只能引用本类的数据成员 ——C C B D A D C或D D A B C.指向对象的常指针的值可以重新赋值 D.常对象的数据成员不一定是常数据成员 —第 1 页 共 3 页
——
号学 名纸姓 卷 试 试 级考班 学 计大设业程序工象对南向湖面 名称程课 院学通信与算机计 )院(系 ————三、简答题(每小题8分,共24分) int Student::Sum = 0; 1.什么是类?什么是对象?什么是面向对象的程序设计? int main() ——答:(评分标准:前2个知识点每个2分,后一个知识点4分。不完全正确,适当扣分,等{ Student s1(\——价写法给满分) Student s2=s1; 类:是指具有相同的属性和操作方法,并遵守相同规则的对象的集合。 cout< using namespace std; ———关闭。它与应用程序共用一个消息循环,它产生后,应用程序一样可以接收消息循环。 class Point{ — 3. 构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数? public: virtual void Draw() { cout << \} ——答:(评分标准:每个知识点各2分,不完全正确,适当扣分,等价写法给满分) virtual ~Point() { }; 线构造函数的作用:用于新建对象的初始化工作。 }; 封析构函数的作用:用于在撤销对象前,完成一些清理工作,比如:释放内存等。 class Circle: public Point { 密每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数; public: void Draw() { cout << \——对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。 ~Circle() { cout << \— 四、阅读下面程序,写出程序运行的结果。(共26分) }; class Rectangle : public Point { ——1.程序1(6分) —#include public: —#include void Draw() { cout << %using namespace std; ~Rectangle() { cout << \} class Student }; ———{public: int main(void) — string name; static int Sum; { Point *pt,vp; Circle vc; Student(string n){ name = n; Sum+=FindSum(name); pt = &vc; pt->Draw(); ——cout<<\ pt = &vp; pt->Draw(); —Student(Student &s) { name = s.name; pt = new Rectangle; pt->Draw(); delete pt; —Sum+=FindSum(name);cout<<\return 0; int FindSum(string str) } 答:程序运行结果为:(评分标准:共10分,每对一个得2分) { char *p=&str[0]; int i=0; Draw Circle. ——— while(*p++!=NULL) if((*p>='a')&&(*p<='z')) i++; Draw Point. — return i; Draw Rectangle. } Del Rectangle. ——}; Del Circle. —第 2 页 共 3 页
——
号学 名纸姓 卷 试 试 级考班 学 计大设业程序工象对南向湖面 名称程课 院学通信与算机计 )院(系 ————3. 程序3(10分) #include 五、编程题(20分) 设计一个基本账户类Account。公用的成员变量有:Num(账号,int型), Balance(余——using namespace std; 额,float型),私有的成员变量有:Name(储户姓名,string型),公用的成员函数存款,函—class Book 数原型:SaveBal(float B)。Account类的构造函数原型为: Account(int N=123,string —{ Nam=\。要求: —public: Book( ) {cout<<\(1)编写类Account及其成员函数。 (2)从Account类中派生出子账户类SubAccount,新增公有数据成员: —— Book(int size) {cout<<\SubName(子账户姓名,string型), pSub(指向子账户的指针变量,子账户类型也是int— ~Book( ) {cout<<\} }; 型,在构造函数中,判断子账户姓名不为空,则动态生成一个用该指针指向的子账户)。在该类的虚析构函数中要对 pSub进行清理。SubAccount类的构造函数原型为:SubAccount(int ——class Note N,string Nam,string SNam,float B) —{ (3)编写一个主程序,定义一个SubAccount类对象。其中: SubAccount类对象的参数—public: Note(int color=255) {cout<<\依次为:(234,\,并且对该对象存款100。 ~Note( ){cout<<\} (4)定义一个输出文件OutF.dat,把该对象的账号、子账户名和余额输出到这个文件中。 编程解答:(请注意,程序代码分2栏写在下面空白处) ———}; —class Notebook:public Book,public Note 参考代码: class SubAccount:public Account { 评分标准:写出2个类分别得7分,编出main{public: ——public: ()函数得6分。注意:程序的所有等价写法同 string SubName; 线 Notebook(int p ):member( ), Note( ),Book(p) 样给分,不完全正确酌情扣分。 int *pSub; 封 {cout<<\ SubAccount(int N,string Nam,string 密 ~Notebook( ){cout<<\} private: #include SNam,float B):Account(N,Nam,B) #include { —— Book member; #include SubName = SNam; pSub = —}; NULL; int main( ) using namespace std; if (SNam!=\ pSub = new ——{ Note n(2); class Account { int; — Notebook nb(4); private: } //参数的顺序可变 — return 0; string Name; virtual ~SubAccount(){ } public: if(pSub!=NULL) delete pSub; } int Num; }; ———答:程序运行结果为:(评分标准:共10分,每对一个得1分) —create Note:2 float Balance; int main() create Book:4 Account(int N=123,string Nam=\{ ——create Note:255 B=0.0 ) SubAccount sa1(234,\\—create Book. { sa1.SaveBal(100); —create Notebook. Num=N; ofstream f1(\delete Notebook. Name = Nam; f1<—