for(int i = 0; i < number - 1; i++) {
for(int j = 0; j < number - 1 - i ; j++) {
if(*P[j+1] > *P[j]) {
base = P[j]; P[j] = P[j+1]; P[j+1] = base; } } }
if(number == 6) {
base = P[2]; P[2] = P[3]; P[3] = base; }
for(int i = 0; i < number; i++) {
P[i]->Show();
}
for(int i = 0; i < number; i++) {
delete P[i]; }
return 0; }
试题查看
标题: 虚函数 时 限: 3000 ms 内存限制: 10000 K 总时限: 3000 ms 描述:
利用虚函数实现多态:
(1)设计Person类,要求具有用于表示姓名的保护数据成员:string szName; 实现信息打印的公有成员函数:void Print()。其中,Print函数设计为虚函数,输出的信息格式为:“Person 姓名”。
(2)从Person类派生Student类,添加用于表示学号的保护数据成员:int iNumber;重定义用于信息打印的公有成员函数:void Print()。其中,Print函数输出的信息格式为:“Student 姓名 学号”。 (3)从 Person类派生Teacher类,添加用于表示教龄的保护数据成员:int iYear;重定义用于信息打印的公有成员函数:void Print()。其中,Print函数输出的信息格式为:“Teacher 姓名 教龄”。
(4)从Student类派生Graduate类,添加用于表示研究方向的保护数据成员:string szResearch;重定义用于信息打印的公有成员函数:void Print()。其中,Print函数输出的信息格式为:“Graduate 姓名 研究方向”。
在main函数中根据用输入的整数动态创建一个Person类的对象指针数组。用户依次输入对象信息(对象类别及其相应的数据成员值),根据对象类别动态创建相应的对象并赋给相应的对象指针数组元素。全部录入后,根据用户输入要显示的对象信息在数组中的位置,调用Print函数在屏幕上打印出相应对象的信息。如果用户输入“exit”,则退出。 对象指针数组的长度;
对象类型及对象信息(输入方式见输入样例);
输入:
要显示的对象在数组中的位置; exit。
输出: 用户要求显示的对象信息。
4
Person Zhang Student Zhao 200905
输入样例:
Graduate Li 200905 DataMining Teacher Luo 10 0 2
exit
Person Zhang
输出样例:
Graduate Li 200905 DataMining
提示: 基类的成员函数Print()定义成虚函数。 来源:
#include
public:
Person(string name) {
szName = name; }
virtual void Print() {
cout << \ }
virtual ~Person() {
} protected:
string szName; };
class Student: public Person {
public:
Student(string name,int number):Person(name) {
iNumber = number; }
void Print() {
cout << \ }
virtual ~Student() {
}
protected:
int iNumber; };
class Teacher: public Person {
public:
Teacher(string name,int IYear):Person(name) {
iYear = IYear; }
void Print() {
cout << \ }
virtual ~Teacher() {
} protected: int iYear; };
class Graduate: public Student {
public:
Graduate(string name,int number,string SzResearch):Student(name,number) {
szResearch = SzResearch; }
void Print() {
cout << \ << iNumber << ' ' << szResearch << endl; } protected:
string szResearch; };
int main() {
int Number;//记录个数 string type; int iNumber;
string name; int iYear;
string szResearch; cin >> Number; Person *P[Number];
for(int i = 0; i < Number; i++) {
cin >> type;
if(type == \ {
cin >> name;
P[i] = new Person(name); }
else if(type == \ {
cin >> name >> iNumber;
P[i] = new Student(name,iNumber); }
else if(type == \ {
cin >> name >> iNumber >> szResearch;
P[i] = new Graduate(name,iNumber,szResearch); }
else if(type == \ {
cin >> name >> iYear;
P[i] = new Teacher(name,iYear); } else {
cout << \输入类型错误,请重新输入!\ i = i - 1; } }
string choice; cin >> choice;
while(choice != \ {
int Choice = atoi(choice.c_str()); if(Choice >= Number) {
cout << \输入越界,请重新输入!\ }