virtual void show()
{ cout << \ cout << \ }
PERSON operator =(const PERSON& other)
{ cout << \ cout << \ strcpy(name, other.name); salary = other.salary; return *this; }
~PERSON()
{ cout << \ protected:
char name[MAXLEN+1]; int salary; };
class EMPLOYEE: public PERSON { //雇员类 public:
EMPLOYEE(char* name = \ { cout << \ virtual void show()
{ cout << \ cout << \ }
~EMPLOYEE()
{ cout << \};
class PROFESSOR: public EMPLOYEE { //教授类,每位教授都是一个雇员 public:
PROFESSOR(char* name = \
EMPLOYEE(name, salary), assistant(\设当前教授对象雇用名为NULL的助教 { cout << \ virtual void show()
{ cout << \ cout << \ }
void setAssistant(PERSON ass)//指定该教授的助教是谁 { assistant = ass; } ~PROFESSOR()
{ cout << \ protected:
PERSON assistant; // 每位教授都雇用了一名助教,助教是PERSON类的对象 };
void main()
{ PERSON * personPtr[3]; PERSON person; EMPLOYEE employee; PROFESSOR professor;
cout<
for (int i = 0; i < 3; i++) personPtr[i]->show(); cout<
cout<
五、 程序设计(24分)
1. (8分)类属类ARRAY描述一个动态数组。数组中的元素记录在一个长度为n的数组X中,要求X
根据使用时的实际长度n动态分配。ARRAY提供如下操作: ? 赋值运算(将一个ARRAY数组赋给另一个ARRAY数组);
? 以友元形式重载了运算符+实现两个ARRAY数组对应位置上的元素相加; ? 求该ARRAY数组的最大值。
5
ARRAY的用法如以下主程序所示。要求根据主程序中的应用,考虑ARRAY类应该提供什么功能,并给出ARRAY类界面的声明(类中声明了什么成员),不必提供ARRAY的类实现(不必定义类的成员函数)。
提示:定义该类属类的操作,使其可以实现主程序中使用到该类的功能。 void main() { }
ARRAYs1; // ARRAY类如此使用,考虑它是否是一个普通的类? ARRAYs3(10); // 10是数组长度 int max1; …… s3 = s1 + s3; max1 = s3.max();
2. (16分)设计一个词典类Dic,每个单词包括英文单词及对应的中文含义,提供构造这个词典的
操作,并有一个英汉翻译成员函数,通过查词典的方式将一段英语翻译成对应的汉语。 提示:
? 例如;要把英语“I am a student”翻译为中文“我是一个学生”,则应先在词典类中添
加(\一个\、(\我\、(\是\、(\学生\中英文单词对。 ? 可考虑使用以下库函数:
? char* strcpy(char* str1, const char* str2);
将str2指向的字符串复制到str1指向的位置中并返回str1。注意为str1分配的存储空间必须能放得下str2指向的字符串。
? int strcmp(const char* str1, const char* str2);
比较两个字符串str1和str2的内容是否相同(按字典排序方法)。如果str1小于str2则返回负数,str1等于str2则返回零,str1大于str2则返回正数。
要求:
1). 从文本文件in.data中读入要翻译的英语,例如“I am a student”; 2). 从文本文件dic.data中读入中英文单词对,建立词典类; 3). 将翻译结果,例如“我是一个学生”,输出到文本文件out.data; 4). 上述指定文件名不得更改; 5). 不考虑程序效率问题; 6). 请尽量多提供注释。
《完》
6