题目描述
利用虚函数实现多态:
(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
输出
用户要求显示的对象信息。
样例输入
<span style="color:#333333"><span style="background-color:#f5f5f5">4
Person Zhang
Student Zhao 200905
Graduate Li 200905 DataMining
Teacher Luo 10
0
2
exit</span></span>
样例输出
<span style="color:#333333"><span style="background-color:#f5f5f5">Person Zhang
Graduate Li 200905 DataMining</span></span>
提示
答案:
#include<iostream>
#include<cstring>
#include <cstdlib>
using namespace std;
class Person
{
protected:
string name_;
public:
Person(string name)
{
name_ = name;
}
virtual void Print()
{
cout << "Person " << name_ << endl;
}
};
class Student : public Person
{
protected:
int number_;
public:
Student(string name,int n):Person(name),number_(n)
{
}
void Print()
{
cout << "Student " << name_ << " " << number_ << endl;
}
};
class Teacher : public Person
{
protected:
int year_;
public:
Teacher(string name,int y):Person(name),year_(y)
{
}
void Print()
{
cout << "Teacher " << name_ << " " << year_ << endl;
}
};
class Graduate : public Student
{
protected:
string research_;
public:
Graduate(string name,int n,string r):Student(name,n),research_(r)
{
}
void Print()
{
cout << "Graduate " << name_ << " " << number_ << " " << research_ << endl;
}
};
int main()
{
int n;
cin >> n;
Person** p = new Person*[n];
int i = 0,snumber,tyear;
string f,pname,major;
for(i = 0;i < n;i++)
{
cin >> f;
if(f == "Person")
{
cin >> pname;
p[i] = new Person(pname);
}
else if(f == "Student")
{
cin >> pname >> snumber;
p[i] = new Student(pname,snumber);
}
else if(f == "Teacher")
{
cin >> pname >> tyear;
p[i] = new Teacher(pname,tyear);
}
else if(f == "Graduate")
{
cin >> pname >> snumber >> major;
p[i] = new Graduate(pname,snumber,major);
}
}
string str;
cin >> str;
int arr[n],c = 0;
for(i = 0;i < n;i++)
{
if(str == "exit")
{
break;
}
arr[i] = atoi(str.c_str());
c++;
cin >> str;
}
for(i = 0;i < c;i++)
{
p[arr[i]]->Print();
}
return 0;
}
有问题请指出,欢迎大家讨论!!!