收藏 分销(赏)

2023年面向对象程序设计含答案.doc

上传人:二*** 文档编号:4549691 上传时间:2024-09-28 格式:DOC 页数:13 大小:42.04KB 下载积分:5 金币
下载 相关 举报
2023年面向对象程序设计含答案.doc_第1页
第1页 / 共13页
本文档共13页,全文阅读请下载到手机保存,查看更方便
资源描述
一、 填空题(20分) 1、 __构造函数___是特殊的成员函数,在创建和初始化对象时调用。 2、 _静态成员____是局部于类的成员,它提供一种同类对象的__共享____机制。 3、 运算符重载的作用是使运算符可以操作自定义的_类对象___,但重载后运算符原有的 _基本语义__不变。 4、 派生类不能访问基类的_私有__成员,但可以访问基类的公有成员和__保护___成员。 5、 具有__纯虚函数___的类称为抽象类。 6、 Windows应用程序是靠_消息_来驱动的,其主函数的重要任务是对窗口进行初始化工作和_消息循环__。 7、 MFC是用消息映射表来实现消息与__消息响应函数__之间的映射的,MFC通过__4____个宏来声明和实现消息映射表。 8、 在文档/视图结构的框架中,视图类_CView__类的对象用来显示数据并接受用户操作。文档类_CDocument__对象的作用是存储和管理数据。 9、 CPaintDC是_CDC__类中最常用的派生类,它只能使用在CView类的_OnDraw__函数中。 10、 消息WM_MOUSEMOVE的消息响应函数的函数名为_OnMouseMove___。 11、 资源是供Windows应用程序使用的特殊数据,它们驻留在硬盘上的_可执行文献__中。常用的资源有菜单、快捷键、__图标___、位图等。 12、 内存中的对象可以以文献的形式存储在永久性存储介质中,而当应用程序再把它从永久性存储介质读入后,该对象能恢复为本来的状态,则该对象称之为__永(持)久性对象___。 二、简述题(20分,每题5分) (1)简述构成文档/视图结构应用程序框架的4个MFC派生类,并说出它们的功能。 答:假如工程名称为MyPrj,则MFC AppWizard会自动创建以下4个派生类来构成 应用程序的框架:CFrame类的派生类CMmainFrame、CWinApp类的派生类CMyPrjApp、CDocument类的派生类CMyPrjDoc和CMyPrjView。 其中,CMyPrjDoc类对象用来存储和管理应用程序中的数据;CMainFrame对象与CMyPrjView对象构成了应用程序的界面,CMainFrame对象只是CMyPrjView对象的容器,而CMyPrjView类的对象是用来显示文档与接受用户事件的;CMyPrjApp类的对象是应用程序的全局对象;它是应用程序中对象的容器;负责创建应用程序界面和消息循环。 (2)为什么拆分窗口的显示更新必须要同步?文档类的成员函数Update All Views的作用是什么? 答:由于应用程序的所有拆分窗口显示的应当是同一个文档,所以当文档发生变化时,该文档所相应的窗口当然要同时更新显示以对的地反映文档的内容。 文档类的成员函数Update All Views的作用是告知文档所相应的所有窗口同时进行重绘。 (3)如何才干使控件成为窗口的子窗口并且在窗口中可见?按钮控件能发明哪三种不同的形式? 答:为了使控件成为窗口的 子窗口并且在窗口中可见,两个控制样式的常数使所有控件都必须使用的,一个是WS_CHILD,另一个是WS_VISIBLE,前者使控件成为应用程序的 子窗口,后者使控件可见。在使用多个常数制定控件样式时,应当用符号"|"将其进行连接。 按钮控件能发明以下三种不同的形式:下压按钮、复选框、和单选按钮。 (4)如何把绘图工具载入设备描述环境进行绘画?请以画笔为例写出执行环节。 答:(1)创建画笔:CPen newPen(style,width,color); (2) 把画笔载入DC: CPen *oldPen=pDC->SelectObject(&newPen); (3)按规定进行绘画 (4)恢复旧画笔pDC->SelectObject(oldPen); 三、阅读下列程序,写出执行结果。(40分,每题5分) 1、#include<iostream.h> class Abc {public: 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; tempobj.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=”<<a<<’\t’<<”b=”<<b<<’\t’<<”c=”<<c<<’\t’<<endl; (obj2 * obj3).get(a,b,c); cout<<”(obj2*obj3):\t”<<”a=”<<a<<’\t’<<”b=”<<b<<’\t’<<”c=”<<c<<’\t’<<endl; } 运营结果: (obj1*obj2): a=5 b=10 c=15 (obj2*obj3): a=25 b=50 c=75 2、#include <iostream.h> class BASE1 {public: BASE1(int i){cout<<”调用基类BASE1的构造函数:”<<i<<endl;} }; class BASE2 {public: BASE2(int j){cout<<”调用基类BASE2的构造函数:”<<j<<endl;} }; 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+d<<endl;} private: BASE1 b1; BASE2 b2; }; void main( ) {A ojb(11,22,33,44);} 运营结果: 调用基类Base1的构造函数:33 调用基类Base2的构造函数:22 调用基类Base1的构造函数:44 调用基类Base1的构造函数:11 调用派生类A的构造函数:110 3、#include <iostream.h> template <typename T> 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=”<<i<<’\t’<<”j=”<<j<<endl; double a,b; a=1.23; b=3.21; fun(a,b); cout<<”a=”<<a<<’\t’<<”b=”<<b<<endl; double m=10; int n=30; fun(m,n); cout<<”m=”<<m<<’\t’<<”n=”<<n<<endl; } 运营结果: i=10 j=30 a=3.21 b=1.23 m=10 n=30 4、#include <iostream.h> void main( ) {double x=123.456; cout.width(10); cout.setf(ios::dec,ios::basefield); cout<<x<<endl; cout.setf(ios::left); cout<<x<<endl; cout.width(15); cout.setf(ios::right,ios::left); cout<<x<<endl; cout.setf(ios::showpos); cout<<x<<endl; cout<<-x<<endl; cout.setf(ios::scientific); cout<<x<<endl; }运营结果: 123.456 123.456 123.456 +123.456 -123.456 +1.234560e+002 5、#include <iostream.h> enum BREED { GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB }; class Mammal {public: // constructors Mammal():itsAge(2), itsWeight(5){} ~Mammal(){} //accessors int GetAge() const { return itsAge; } void SetAge(int age) { itsAge = age; } int GetWeight() const { return itsWeight; } void SetWeight(int weight) { itsWeight = weight; } //Other methods void Speak()const { cout << "Mammal sound!\n"; } void Sleep()const { cout << "shhh. I'm sleeping.\n"; } protected: int itsAge; int itsWeight; }; class Dog : public Mammal {public: // Constructors Dog():itsBreed(GOLDEN){} ~Dog(){} // Accessors BREED GetBreed() const { return itsBreed; } void SetBreed(BREED breed) { itsBreed = breed; } // Other methods void WagTail() const { cout << "Tail wagging...\n"; } void BegForFood() const { cout << "Begging for food...\n"; } private: BREED itsBreed; }; int main() {Dog fido; fido.Speak(); fido.WagTail(); cout << "Fido is " << fido.GetAge() << " years old\n"; return 0; } 运营结果:Mammal sound! Tail wagging … Fido is 2 years old 6、#include<iostream.h> class Base {public: void who(){cout<<”Base class”<<endl;}; class Derived1: public Base {public: void who(){cout<<”Derived1 class”<<endl;}; class derived2: public Base {public: void who(){cout<<”Derived2 class”<<endl; Void main() {base obj1, *p; derived1 obj2; derived2 obj3; P=&obj1; p->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 class 7、#include<iostream.h> class example { private: int date; static int count; public: example(int y=10):date(y) { cout<<”date=”<<date<<endl; Count++;} static int display() {return count;} }; int example::count=0; void main() {example e1; example e2(20); cout<<e1.Display()<<endl; cout<<e2.Display()<<endl; cout<<example::Display()<<endl; } 运营结果:Date=10 Date=20 2 2 2 8、指出下列程序中的错误,并说明理由 #include<iostream.h> class Student { public: void Student(){};//构造函数有返回类型错,函数后面多分号void Display() {cin>>name>>number;cout<<姓名<<name<<学号<<number<<endl;} //字符串缺少双引号 private: char *name=noname; //数据成员不能赋值 int number=0; //数据成员不能赋值 }; 四、编程题:(20分,每题10分) 1、 编写一个程序,实现小型公司的工资管理。该公司重要有4类人员:经理、兼职技术人员、销售员和销售经理。规定存储这些人员的编号、姓名和月工资,计算月工资并显示所有信息。月工资计算办法是:经理拿固定月薪8000元,兼职技术人员按每小时100元领取月薪,销售员按当月销售额的4%提成,销售经理既拿固定月工资又拿销售提成,固定月工资为5000元,销售提成为所管部门当月销售总额的0.5%。规定补充未完毕的代码,使其成为一个完整的程序。 #include <iostream.h> class Employee {public: employee(){cout<<”职工编号、姓名”; cin>>no>>name; salary=0;} void Pay(){} void Display(){} Protected: Int no; char name[10]; float salary;}; Class technician: public Employee //派生技术人员 { public:Technician() {hourlyrate=100.0;} void Pay(){cout<<name<<”本月工作时数:” cin>>workhours; salary=hourlyrate*workhours; } void Display(){cout<<”兼职技术人员”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl; } private: //补充下面内容 float hourlyrate int workhours;}; Class Saleman: public Employee //派生销售员类 { public: Salesman(){ commrate=0.04f;} //销售提成比例 void Pay() {cout<<name<<”本月销售额:”; //补充下面内容 cin>>sales; salary=sales*commrate;} void Display() {cout<<”销售员”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl; } Protected: Float commrate; sales;}; Class Manager: virtual public Employee { public: Manager(){ monthlypay=8000; } //补充函数体内容 Void Pay(){ salary=monthlypay; } //补充函数体内容 void Display() {cout<<”经理”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl; } Protected: float monthlypay;}; Class SalesManager: public Manager, public Salesman //补充此处类的内容 { public: SalesManager(){ monthlypay=5000; Commrate=0.005f; } void Pay(){cout<<name<<”所管部门月销售额:”; cin>>sales; salary=monthlypay+sales*commrate;} void Display(){cout<<”销售经理”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl; }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秒)(答案略)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服