📄 virtpers.cpp
字号:
//这个程序在本书所带软盘中。文件名为VIRTPERS.CPP
//这个程序利用纯虚拟成员子程序和继承体现程序的多态性。
#include <iostream.h>
#include <stdio.h>
enum boolean { false, true }; //定义枚举类型数据boolean
class base { //定义具有纯虚拟成员子程序的基类
public:
void get_name()
{
cout << " 请输入姓名: ";
gets(name);
}
void display()
{
cout << "姓名: " << name;
}
virtual void get_data() = 0; //纯虚拟成员子程序
virtual boolean outstanding() = 0; //纯虚拟成员子程序
protected:
char name[40];
};
class student : public base { //学生类
public:
void get_data() //输入学生信息
{
base::get_name();
cout << " 请输入学生的 GPA: "; cin >> GPA;
}
boolean outstanding()
{
return (GPA > 3.5) ? true : false;
}
private:
float GPA;
};
class professor : public base { //教授类
public:
void get_data() //输入教授信息
{
base::get_name();
cout << " 请输入教授的出版数: ";
cin >> num;
}
boolean outstanding()
{
return (num > 20) ? true : false;
}
private:
int num;
};
void main(void)
{
base* persPtr[100]; //人名数组,最大为100单元
int n = 0; //计数器
char choice;
do {
cout << "输入教授还是学生 (p/s): ";
cin >> choice;
if (choice == 's') //如果输入的是学生
persPtr[n] = new student; //把学生数据放入数组
else
persPtr[n] = new professor; //否则输入的是教授
persPtr[n++]->get_data(); //输入数据
cout << " 输入下一个 (y/n)?"; //是否输入下一个
cin >> choice;
} while ( choice=='y' ); //继续循环直到回答不是y
for(int j=0; j<n; j++) //定义名单
{ // persons, and
persPtr[j]->display(); // say if outstanding
if ( persPtr[j]->outstanding() == true )
cout << " 杰出人物奖接受者" << endl;
else
cout << endl;
}
}
/*下面是这个程序运行后的一个典型输出结果:
输入教授还是学生 (s/p): s
请输入姓名: 王钢
请输入学生的 GPA: 3.8
输入下一个 (y/n)? y
输入教授还是学生 (s/p): p
请输入姓名: 李新
请输入教授的出版数: 22
输入下一个 (y/n)? y
输入教授还是学生 (s/p): p
请输入姓名: 高翔
请输入教授的出版数: 19
输入下一个 (y/n)? y
输入教授还是学生 (s/p): s
请输入姓名: 张维
请输入学生的 GPA: 3.4
输入下一个 (y/n)? n
姓名: 王钢 杰出人物奖接受者
姓名: 李新 杰出人物奖接受者
姓名: 高翔
姓名: 张维
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -