c++实验二(2)

建立一个名为CStudent的类,该类有以下几个属性:学号、姓名(使用字符指针)、成绩,并为上述属性定义相应的方法。
用C++ 面向对象的程序设计方法,找到并输出存放在CStudent类动态数组中学生成绩最高的学生信息(需考虑分数相同的情况,输出学号、姓名和成绩)。


#include<iostream>
#include<cstring>
using namespace std;
class Cstudent
{
private :
long long number;
char *p;//字符指针
int score;
public:
Cstudent(long n,char *q,int s);//默认构造
Cstudent(const Cstudent &s);//复制构造
friend void max(Cstudent*st,int count1);//友元函数方便后面比较成绩大小 实质上就是一个数组排序;
void input();//输入相应的数据
void show();//展示
~Cstudent(); //析构函数
};
Cstudent::Cstudent(long n=0,char *q="no mame",int s=0)//有默认值
{
p=new char[20];//只用在构造函数的地方分配空间
strcpy(p,q);
number=n;
score=s;
}
Cstudent::Cstudent(const Cstudent &s)
{
number=s.number;
score=s.score;
p=new char (*s.p);//深复制函数
}
void Cstudent:: input()//录入数据
{
long long num;
int s;
cout<<"请输入姓名:"<<endl;
gets(p);
cout<<"请输入学号,成绩:"<<endl;
cin>>num>>s;
number=num;
score=s;
cin.ignore();
}
void Cstudent ::show()
{
cout<<"姓名:";
puts(p);
cout<<"学号:"<<number<<endl<<"成绩:"<<score<<endl;
}
Cstudent::~Cstudent()
{
delete []p;//与前面的new对应
}
void max(Cstudent*st,int count1)
{
int maxx=0;
int c=0;
int j;
for(int i=0;i<count1;i++)
{
if(st[i].score>maxx)
{
maxx=st[i].score;
j=i;
}
}
for(int i=0;i<count1;i++)
{
if(st[i].score==maxx) c++;
}
if(c==1)
{
cout<<"分数最高的同学是:"<<endl;
st[j].show();
}
else
{
cout<<"下面的同学并列最高分:"<<endl;
for(int i=0;i<count1;i++)
{
if(st[i].score==maxx)
{
st[i].show();
cout<<endl;
}
}
}
}
int main()
{ cout<<"请输入对象的个数:"<<endl;
int a;
cin>>a;
cin.ignore();
const int count=a;
Cstudent*str=new Cstudent[count];
for(int i=0;i<count;i++)
{
str[i].input();
}
max(str,count);
return 0;
}

posted @ 2020-05-22 23:04  我是个好孩子  阅读(727)  评论(0编辑  收藏  举报