资源描述
系领导
审批并署名
A / B卷
广州大学 ~ 年第 一 学期考试卷
课程 面对对象程序设计 考试形式(闭卷,考试)
学院 系 专业 班级 学号 姓名
题次
一
二
三
四
五
六
七
八
九
十
总分
评卷人
分数
20
20
40
20
100
评分
一、 填空题(20分)
1、 __ ___是特殊的组员函数,在创建和初始化对象时调用。
2、 _ ____是局部于类的组员,它提供一个同类对象的__ ___机制。
3、 运算符重载的作用是使运算符能够操作自定义的_ __,但重载后运算符原有的 _ _不变。
4、 派生类不能访问基类的_ __组员,但能够访问基类的公有组员和_ __组员。
5、 具备__ ___的类称为抽象类。
6、 Windows应用程序是靠_ _来驱动的,其主函数的重要任务是对窗口进行初始化工作和_ __。
7、 MFC是用消息映射表来实现消息与 ___之间的映射的,MFC通过_____个宏来申明和实现消息映射表。
8、 在文档/视图结构的框架中,视图类_ __类的对象用来显示数据并接收用户操作。文档类_ _对象的作用是存储和管理数据。
9、 CPaintDC是_ __类中最常用的派生类,它只能使用在CView类的_ __函数中。
10、 消息WM_MOUSEMOVE的消息响应函数的函数名为_ ___。
11、 资源是供Windows应用程序使用的特殊数据,它们驻留在硬盘上的_ _中。常用的资源有菜单、快捷键、__ ___、位图等。
12、 内存中的对象能够以文献的形式存储在永久性存储介质中,而当应用程序再把它从永久性存储介质读入后,该对象能恢复为本来的状态,则该对象称之为_ _ ___。
二、简述题(20分,每题5分)
(1)简述组成文档/视图结构应用程序框架的4个MFC派生类,并说出它们的功效。
(2)为何拆分窗口的显示更新必须要同时?文档类的组员函数Update All Views的作用是什么?
(3)怎样才能使控件成为窗口的子窗口并且在窗口中可见?按钮控件能创造哪三种不一样的形式?
(4)怎样把绘图工具载入设备描述环境进行绘画?请以画笔为例写出执行步骤。
三、阅读下列程序,写出执行成果。(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;
}
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);}
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;
}
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;
}
5、#include <iostream.h>
enum BREED { GOLDEN, CAIRN, DANDIE, SHETLAND, DOBERMAN, LAB };
class Mammal
{public:
Mammal():itsAge(2), itsWeight(5){} // constructors
~Mammal(){}
int GetAge() const { return itsAge; }
void SetAge(int age) { itsAge = age; }
int GetWeight() const { return itsWeight; }
void SetWeight(int weight) { itsWeight = weight; }
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:
Dog():itsBreed(GOLDEN){}
~Dog(){}
BREED GetBreed() const { return itsBreed; }
void SetBreed(BREED breed) { itsBreed = breed; }
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;
}
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();
}
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;
}
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: //补充下面内容
};
Class Saleman: public Employee //派生销售员类
{ public:
Salesman(){ commrate=0.04f;} //销售提成百分比
void Pay() {cout<<name<<”本月销售额:”; //补充下面内容
}
void Display()
{cout<<”销售员”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl;
}
Protected:
Float commrate; sales;
};
Class Manager: virtual public Employee
{ public:
Manager(){ } //补充函数体内容
Void Pay(){ } //补充函数体内容
void Display()
{cout<<”经理”<<name<<”(编号为”<<no<<”)”本月工资:”<<salary<<endl;
}
Protected:
float monthlypay;
};
Class SalesManager: //补充此处类的内容
{
};
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秒)
展开阅读全文