1、一、 填空题(20分)1、 _构造函数_是特殊的成员函数,在创建和初始化对象时调用。2、 _静态成员_是局部于类的成员,它提供一种同类对象的_共享_机制。3、 运算符重载的作用是使运算符可以操作自定义的_类对象_,但重载后运算符原有的 _基本语义_不变。4、 派生类不能访问基类的_私有_成员,但可以访问基类的公有成员和_保护_成员。5、 具有_纯虚函数_的类称为抽象类。6、 Windows应用程序是靠_消息_来驱动的,其主函数的重要任务是对窗口进行初始化工作和_消息循环_。7、 MFC是用消息映射表来实现消息与_消息响应函数_之间的映射的,MFC通过_4_个宏来声明和实现消息映射表。8、 在文
2、档/视图结构的框架中,视图类_CView_类的对象用来显示数据并接受用户操作。文档类_CDocument_对象的作用是存储和管理数据。9、 CPaintDC是_CDC_类中最常用的派生类,它只能使用在CView类的_OnDraw_函数中。10、 消息WM_MOUSEMOVE的消息响应函数的函数名为_OnMouseMove_。11、 资源是供Windows应用程序使用的特殊数据,它们驻留在硬盘上的_可执行文献_中。常用的资源有菜单、快捷键、_图标_、位图等。12、 内存中的对象可以以文献的形式存储在永久性存储介质中,而当应用程序再把它从永久性存储介质读入后,该对象能恢复为本来的状态,则该对象称之
3、为_永(持)久性对象_。二、简述题(20分,每题5分)(1)简述构成文档/视图结构应用程序框架的4个MFC派生类,并说出它们的功能。答:假如工程名称为MyPrj,则MFC AppWizard会自动创建以下4个派生类来构成应用程序的框架:CFrame类的派生类CMmainFrame、CWinApp类的派生类CMyPrjApp、CDocument类的派生类CMyPrjDoc和CMyPrjView。 其中,CMyPrjDoc类对象用来存储和管理应用程序中的数据;CMainFrame对象与CMyPrjView对象构成了应用程序的界面,CMainFrame对象只是CMyPrjView对象的容器,而CMy
4、PrjView类的对象是用来显示文档与接受用户事件的;CMyPrjApp类的对象是应用程序的全局对象;它是应用程序中对象的容器;负责创建应用程序界面和消息循环。(2)为什么拆分窗口的显示更新必须要同步?文档类的成员函数Update All Views的作用是什么?答:由于应用程序的所有拆分窗口显示的应当是同一个文档,所以当文档发生变化时,该文档所相应的窗口当然要同时更新显示以对的地反映文档的内容。文档类的成员函数Update All Views的作用是告知文档所相应的所有窗口同时进行重绘。(3)如何才干使控件成为窗口的子窗口并且在窗口中可见?按钮控件能发明哪三种不同的形式?答:为了使控件成为窗
5、口的 子窗口并且在窗口中可见,两个控制样式的常数使所有控件都必须使用的,一个是WS_CHILD,另一个是WS_VISIBLE,前者使控件成为应用程序的 子窗口,后者使控件可见。在使用多个常数制定控件样式时,应当用符号|将其进行连接。按钮控件能发明以下三种不同的形式:下压按钮、复选框、和单选按钮。(4)如何把绘图工具载入设备描述环境进行绘画?请以画笔为例写出执行环节。答:(1)创建画笔:CPen newPen(style,width,color);(2) 把画笔载入DC: CPen *oldPen=pDC-SelectObject(&newPen);(3)按规定进行绘画(4)恢复旧画笔pDC-S
6、electObject(oldPen);三、阅读下列程序,写出执行结果。(40分,每题5分) 1、#includeclass Abcpublic: Abc( )a=0; b=0; c=0;Abc(int i,int j,int k)a=i; b=j; c=k;void get(int&i,int&j,int&k)i=a; j=b; k=c;Abc operator * (Abc obj);private: int a,b,c;Abc Abc:operator * (Abc obj)Abc tempobj; tempobj.a=a*obj.a; tempobj.b=b*obj.b; tempob
7、j.c=c*obj.c; return tempobj;void main() Abc obj1(1,2,3),obj2(5,5,5),obj3; int a,b,c; obj3=obj1*obj2; obj3.get(a,b,c);cout”(obj1*obj2):t”a=”at”b=”bt”c=”ctendl;(obj2 * obj3).get(a,b,c);cout”(obj2*obj3):t”a=”at”b=”bt”c=”ctendl;运营结果:(obj1*obj2): a=5 b=10 c=15(obj2*obj3): a=25 b=50 c=752、#include class B
8、ASE1 public:BASE1(int i)cout”调用基类BASE1的构造函数:”iendl; ; class BASE2 public:BASE2(int j)cout”调用基类BASE2的构造函数:”jendl; ; class A: public BASE1, public BASE2 public:A(int a,int b,int c,int d): BASE2(b), BASE1(c), b2(a),b1(d) cout”调用派生类A的构造函数;”a+b+c+dendl;private:BASE1 b1;BASE2 b2;void main( )A ojb(11,22,33
9、,44);运营结果:调用基类Base1的构造函数:33调用基类Base2的构造函数:22调用基类Base1的构造函数:44调用基类Base1的构造函数:11调用派生类A的构造函数:1103、#include template void fun(T&x,T&y) T temp;temp=x; x=y; y=temp;void fun(double x, int y)double temp;temp=x; x=y; y=temp;void main( )int i,j;i=30; j=10;fun(i,j);cout”i=”it”j=”jendl;double a,b;a=1.23; b=3.21
10、;fun(a,b);cout”a=”at”b=”bendl;double m=10; int n=30;fun(m,n);cout”m=”mt”n=”nendl;运营结果:i=10 j=30a=3.21 b=1.23m=10 n=304、#include void main( ) double x=123.456;cout.width(10);cout.setf(ios:dec,ios:basefield);coutxendl;cout.setf(ios:left);coutxendl;cout.width(15);cout.setf(ios:right,ios:left);coutxendl
11、;cout.setf(ios:showpos);coutxendl;cout-xendl;cout.setf(ios:scientific);coutxendl; 运营结果: 123.456 123.456 123.456+123.456 -123.456 +1.234560e+0025、#include enum BREED GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB ;class Mammalpublic:/ constructorsMammal():itsAge(2), itsWeight(5)Mammal()/accessorsint
12、GetAge() const return itsAge; void SetAge(int age) itsAge = age; int GetWeight() const return itsWeight; void SetWeight(int weight) itsWeight = weight; /Other methodsvoid Speak()const cout Mammal sound!n; void Sleep()const cout shhh. Im sleeping.n; protected:int itsAge;int itsWeight;class Dog : publ
13、ic Mammalpublic:/ ConstructorsDog():itsBreed(GOLDEN)Dog()/ AccessorsBREED GetBreed() const return itsBreed; void SetBreed(BREED breed) itsBreed = breed; / Other methodsvoid WagTail() const cout Tail wagging.n; void BegForFood() const cout Begging for food.n; private:BREED itsBreed;int main()Dog fido
14、;fido.Speak();fido.WagTail();cout Fido is fido.GetAge() years oldn;return 0;运营结果:Mammal sound! Tail wagging Fido is 2 years old6、#includeclass Basepublic: void who()cout”Base class”endl;class Derived1: public Basepublic: void who()cout”Derived1 class”endl;class derived2: public Base public: void who
15、()cout”Derived2 class”who();P=&obj2; p-who();P=&obj3; p-who();Obj1.who(); Obj2.who(); Obj3.who();结果:base class Base class Base class Base class Derived1 class Derived2 class7、#include class example private: int date; static int count; public: example(int y=10):date(y) cout”date=”dateendl; Count+;sta
16、tic int display() return count;int example:count=0;void main()example e1; example e2(20); coute1.Display()endl; coute2.Display()endl; coutexample:Display()endl;运营结果:Date=10 Date=20 2 2 28、指出下列程序中的错误,并说明理由#includeclass Student public: void Student();/构造函数有返回类型错,函数后面多分号void Display()cinnamenumber;cout
17、姓名name学号numberendl; /字符串缺少双引号private: char *name=noname; /数据成员不能赋值int number=0; /数据成员不能赋值;四、编程题:(20分,每题10分)1、 编写一个程序,实现小型公司的工资管理。该公司重要有4类人员:经理、兼职技术人员、销售员和销售经理。规定存储这些人员的编号、姓名和月工资,计算月工资并显示所有信息。月工资计算办法是:经理拿固定月薪8000元,兼职技术人员按每小时100元领取月薪,销售员按当月销售额的4%提成,销售经理既拿固定月工资又拿销售提成,固定月工资为5000元,销售提成为所管部门当月销售总额的0.5%。规定
18、补充未完毕的代码,使其成为一个完整的程序。#include class Employeepublic: employee()coutnoname; salary=0;void Pay() void Display()Protected: Int no; char name10; float salary;Class technician: public Employee /派生技术人员 public:Technician() hourlyrate=100.0;void Pay()coutnameworkhours;salary=hourlyrate*workhours; void Displa
19、y()cout”兼职技术人员”name”(编号为”no”)”本月工资:”salaryendl; private: /补充下面内容float hourlyrate int workhours;;Class Saleman: public Employee /派生销售员类 public: Salesman() commrate=0.04f; /销售提成比例 void Pay() coutnamesales; salary=sales*commrate; void Display() cout”销售员”name”(编号为”no”)”本月工资:”salaryendl; Protected: Float
20、 commrate; sales;;Class Manager: virtual public Employee public: Manager() monthlypay=8000; /补充函数体内容 Void Pay() salary=monthlypay; /补充函数体内容 void Display() cout”经理”name”(编号为”no”)”本月工资:”salaryendl; Protected: float monthlypay;Class SalesManager: public Manager, public Salesman /补充此处类的内容 public: SalesM
21、anager() monthlypay=5000; Commrate=0.005f; void Pay()coutnamesales; salary=monthlypay+sales*commrate;void Display()cout”销售经理”name”(编号为”no”)”本月工资:”salaryendl; void main() manager m1; Technician t1; Salesman s1; Salesmanager sm1; m1.pay(); m1.display(); t1.pay(); t1.display();s1.pay(); s1.display(); sm1.pay(); sm1.display();2、定义一个时间类Time,能提供和设立由时、分、秒组成的时间,并编出应用程序,规定涉及定义时间对象,设立时间,运营时间上加1秒的操作,输出该对象的时间,输出格式为:AM(例如:11:20:15AM,上午11时20分15秒)(答案略)