适用专业年级:计算机科学与技术08级 考试时间: 100分钟
一、判断题,正确的打√,错误的打×(每小题1分,共10分)
1.类的友员函数是指可以访问本类私有成员的其它类的成员函数。( × )
2.在定义二维数组时,语句“int a[][3]={{1,3,5},{2}};”是正确的。( √ )
3.如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。( × )
4.函数重载时,它们的参数个数和类型要求都不能相同。( × )
5.在文档/视图结构的程序中,输出是在OnDraw()函数中完成的。( √ )
6.在C++中,标识符Max和MAX是不一样的。( √ )
7.析构函数的作用是当对象不用时,删除对象。( × )
8.在C++中,文件的输入输出可以通过iostream类对象来完成。( × )
9.在声明一个类时,可以不同时声明类的数据成员和成员函数。( √ )
10.在VC6.0开发环境中,可以同时开发几个工程。( √ )
二、简答题(每小题8分,共24分)
1.简要说明面向对象的程序设计的四个主要特征。
答:主要特征:1)、抽象,即忽略当前主题中与目标无关的那些方面,把它的主要特征抽取出来。抽象包括数据抽象和代码抽象。2)、封装,它是将抽象得到的数据成员和代码相结合,形成一个有机的整体。并且,封装可以隐藏内部的细节。3)、继承,它提供了代码重用的一种方式,派生类可以重用基类的属性和行为。4)、多态性,它是指不同类的对象对同一消息作出不同反应,即c++的代码可以根据运行情况的不同而执行不同的操作。
2.类和结构有什么异同?
答:结构是类的一种特例,在结构体中也可以定义成员函数、构造函数和析构函数,成员也可使用private、protected、public。结构和类的区别是:在缺省情况下,结构中的所有成员都是公有的,而在类中是私有的.
3.多态性是指什么?C++中多态性是如何实现的?
答:多态性是指:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。 C++中,多态性是通过指针和虚函数来实现的。
三、填空题(每空2分,共10分)
1.根据程序说明和程序中的注释,填充程序中不完整的部分。
类Number的成员函数Factorial是递归函数,功能是求n!(即n的阶乘,假设n>0)。
#include using namespace std; class Number { private: int Num; public: int n; int Factorial (int n) //递归函数Factorial (n)求n! 。 { if (___(1)_n==0__) return 1; else return ___(2)_n*Factorial (n-1)__; } int GetNum() { return Num; } Number(int n=1) {if (n<=0) Num=1; else Num = n;} }; void main() { Number *p1,*p2; p1 = ___(3)_new Number__;//动态生成由p1指向的Number对象,使用缺省参数。 P2 =___(4)__new Number(7)_;//动态生成由p2指向的Number对象,并使Num为7。 cout< delete p1; delete p2; } 四、阅读下面的程序,写出程序运行的结果。(共26分) 1.程序1(6分) #include using namespace std; int main() { int a=7,b; int &c=b; int f(int x,int y,int z); b=a++; c=f(a,b,c); cout<<"a="< AA(int a) {cout<<"AA con"<~AA( ){cout<<"AA des"< class BB { public: BB(int b=2) {cout<<"BB con"<~BB( ){cout<<"BB des"< class CC:public AA,public BB { public: CC( ):member(5 ),BB( ),AA( ) {cout<<"CC con."< AA member; }; void main( ) { CC obj; } 运行结果为: AA con BB con2 AA con5 CC con. CC des AA des BB des AA des 五、理解问答题(10分) 说明:读懂如下程序,回答题后的问题。 #include class Person { private: int Num; public: int age; char name[10]; virtual void Speak() { cout<<"No Speak."< class Chinese : public Person { public: virtual void Speak() { cout<<"Speak Chinese."< class American : public Person { public: virtual void Speak() { cout<<"Speak English."< void main() { Person *p1, obj; Chinese c1; American a1; p1 = &c1; p1->Speak(); p1 = &a1; p1->Speak(); obj = c1; obj.Speak(); obj = a1; obj.Speak(); } 请回答的问题: (1)写出程序运行的结果。(4分) Speak Chinese. Speak English. No Speak. No Speak. (2)如果把Person类中的Speak()函数说明语句的virtual去掉,即把语句virtual void Speak()改为:void Speak()。再写出程序运行的结果。(4分) No Speak. No Speak. No Speak. No Speak. (3)如果把Person类中的Speak()函数改为纯虚函数,应如何修改该函数?(2分) virtual void Speak() = 0; 六、编程题(20分) 定义一个教师类teacher,它的私有数据成员有Num(教工号,为int型)、Name(姓名,为string型)、Age(年龄,为int型)、Sex(性别,为char型)。公用成员函数有:GetNum( ),它返回教工号;Display( ),它输出教师的上述基本信息(注意:Display( )函数在类外定义)。教师类的构造函数原型为:teacher (int Num0=1001, string Name0="彭老师", int Age0=30,char Sex0='1')。 要求: (1) 编写类teacher,并编写一个主程序,主程序中定义了2个教师对象(其中有一个教师的参数为默认参数,另一个参数可以是任意有效值),然后,输出2个教师的基本信息。 (2)定义一个输出文件TFile.txt,把上述两个教师对象的教工号Num输出到这个文件中。 #include #include using namespace std; class teacher { private: int Num; string Name; int Age; char Sex; public: int GetNum() { return Num;}; teacher(int Num0=1001, string Name0="彭老师", int Age0=30,char Sex0='1') { Num = Num0; Name = Name0; Age = Age0; Sex = Sex0; } void display(); }; void teacher::display() { cout<<"Num="< t2.display(); ofstream f1("TFile.txt",ios::out); f1< return 0; }下载本文