1、第九章 实例化教学专题讨论一、讨论题目设计一个大学的人员类,学生类和教授类通过虚函数实现不同人员的信息显示。要求:人员类信息至少包括姓名;学生类信息至少包括学号和累积学分;教授类信息至少包括家庭固定电话号码和发表论文数量,其中家庭固定电话号码采用(0898-66778899)形式并可直接用和和和#include #include using namespace std;class PhoneNumber public:PhoneNumber()strcpy(areaCode,“0898“);strcpy(line,“12345678“);PhoneNumber(PhoneNumber/重载流插
2、入操作符,如果需要使用 cout somePhoneNumber;则不能重载为成员函数friend istream input.ignore(); input setw( 9 ) num.line; return input; private:char areaCode5,line9; ;PhoneNumber:PhoneNumber(PhoneNumberstrcpy(line,rph.line); class Personpublic:Person(char* s) name = new charstrlen(s)+1; strcpy(name, s); virtual void Disp
3、() cout Disp();/将基类对象地址赋给基类指针Student y(“Student1“, 3.88);p = p-Disp();/将派生类对象 y 地址赋给基类指针Professor z1(“Professor1“, 8);p = p-Disp();/将派生类对象 z 地址赋给基类指针PhoneNumber phone; /创建对象 phonecout phone;Professor z2(“Professor2“, 5,phone);p = p-Disp();/将派生类对象 z 地址赋给基类指针return 0;五、代码分析在主函数有以下一段代码:Person* p; /p 声明
4、为 Person 基类指针Student y(“Student 1“, 3.88); /创建学生派生类 Student 对象 yp = p-Disp();最后一条语句将学生派生类 Student 对象 y 地址赋给 Person 基类指针 p,调用实际指向的派生类对象的 Disp()重定义版本,这就是实现虚函数 Disp()多态调用 。如果将 Person 类中 Disp()函数前面的 virtual 去掉,则的运行结果便不能达到多态效果。家庭固定电话号码定义为 PhoneNumber 类并重载流提取与流插入运算符(和)实现PhoneNumber 类对象的输入输出。教授类 Professor 中包含 PhoneNumber 类成员对象。程序运行结果如下图所示