# include & ltiomanip & gt
# include & lt字符串& gt
使用命名空間std
typedef結構
{
雙a,b;
char c;
}標準;
班級學生
{
字符串名稱;
int id
公共:
Student(string n,int i) : name(n),id(i) {}
虛擬void print()= 0;
虛空判斷(標準s)= 0;
受保護:
void print_info()
{
cout & lt& ltid & lt& lt" " " & lt& lt名稱& lt& lt" ";
}
};
高中:公立學校學生
{
雙倍積分[11];
公共:
HighStu(string n,int i) : Student(n,I)
{
for(int I = 0;我& lt11;i++)
CIN & gt;& gt得分[I];
}
double TotalScore()常量
{
double sum = 0;
for(int I = 0;我& lt11;i++)
sum+= score[I];
返回總和;
}
作廢打印()
{
print _ info();
cout & lt& lt“壹個高分高中生”& lt& lt已修復& lt& ltsetprecision(2)& lttotal score()& lt;& ltendl
}
無效判斷(標準s)
{
if(total score()>;=美國)
print();
}
};
GStu以下班級:公立學生
{
雙倍得分[40];
公共:
UnderGStu(string n,int i) : Student(n,I)
{
for(int I = 0;我& lt40;i++)
CIN & gt;& gt得分[I];
}
雙GPA()常數
{
double sum = 0;
for(int I = 0;我& lt40;i++)
if(score[I]& gt;= 60 & amp& ampscore[I]& lt;= 100)
sum+=(score[I]-50)/10;
返回sum/40;
}
作廢打印()
{
print _ info();
cout & lt& lt“壹個GPA的本科生”& lt& lt已修復& lt& ltsetprecision(2)& ltGPA()& lt;& ltendl
}
無效判斷(標準s)
{
if(GPA()& gt;=標準銀行)
print();
}
};
班級畢業生:公共學生
{
雙倍積分[15];
公共:
GradStu(string n,int i) : Student(n,I)
{
for(int I = 0;我& lt15;i++)
CIN & gt;& gt得分[I];
}
char rank()常量
{
double sum = 0;
for(int I = 0;我& lt15;i++)
{
sum+= score[I];
}
sum/= 15;
if(sum & lt;60)返回‘E’;
else if(sum & lt;70)返回‘D’;
else if(sum & lt;80)返回‘C’;
else if(sum & lt;90)返回‘B’;
elsereturn“A”;
}
作廢打印()
{
print _ info();
cout & lt& lt“有等級的畢業生”& lt& ltrank()& lt;& ltendl
}
無效判斷(標準s)
{
if(rank()& lt;= s.c)
print();
}
};
int main()
{
int n,I;
CIN & gt;& gtn;
學生**pt2stu =新生*[n];
for(I = 0;我& ltn;i++)
{
int id
字符串名稱;
字符串類型;
CIN & gt;& gtid & gt& gt名稱& gt& gt類型;
if(type == "高中")
pt2stu[i] = new HighStu(名稱,id);
else if(type == "本科生")
pt2stu[i] = new UnderGStu(name,id);
else if(type = = " graded ")
pt2stu[i] = new GradStu(name,id);
}
標準s;
CIN & gt;& gts.a & gt& gts.b & gt& gt南卡羅來納州;
for(I = 0;我& ltn;i++)
{
pt 2 stu[I]-& gt;法官;
}
//system(" pause ");
返回0;
}