c++类的设计问题,请各位专家解答

编写程序设计一个学生类 Student,该类包含姓名 name、数学成绩 math、语文成绩 chinese、英语成绩 english 四个数据成员,成员函数包括:showName()用于输出姓名、sum()用于统计总成绩、avg()用于统计平均成绩,并包含无参构造函数、有参构造函数和析构函数。在主函数 main()中定义一个包含 5 个学生对象的数组,实现 5 个学生对象信息录入,在数组中查找总成绩最高的学生,输出该学生的姓名、总成绩和平均成绩。
[输入样例]:
请输入学生的姓名、语文成绩、数学成绩、英语成绩:
张三 87 98 88.5
李四 89 99 89
王五 78 92 86
赵六 76 90 83.5
陈七 95 83 80
[输出样例]:
总成绩第一名:
学生姓名:李四
总成绩:277
平均成绩:92.3333

using namespace std;
class Student {
private:
    string name;
    int math, chinese, english;
public:
    Student() {} 

//无参构造函数 不需要体现,自动生成的 不显式声明也可以用 这里是为了安全性考虑 显式声明一下

Student(string a, int b, int c, int d) //有参构造函数 定义一个包含 5 个学生对象的数组,实现 5 个学生对象信息录入,在数组中查找总成绩最高的学生,输出该学生的姓名、总成绩和平均成绩。
{   name = a;   math = b;   chinese = c;   english = d; }

~Student() {} //析构函数 因为是动态内存分配 所以使用delete对对象进行回收

void showName() { cout << "name is " << name << endl;}

int sum(){return math + chinese + english;}

float avg(){return (float)(math + chinese + english)/3;}

//平均分是浮点型 所以返回float 需要强制转化int->float 防止整型相除得到0.00 返回int应该也行 只是会失去小数部分而已 这里是为了安全性考虑 用float来返回 别忘了加上(float)强制转化标志 不然会报warning告诉你可能会失去小数部分 直接返回int也可以 看你的意愿了
我这里就直接用float吧,好像本来就应该用float来表示平均分吧~当然浮点型也可以表示int double看你情况考虑吧
如果不想失去小数部分就用double或者float如果想保留小数部分并且带有大量的小数位 别问我为什么会带有大量的小数位 这样会占用大量内存 那你就直接申请一片内存来储存大量的浮点型吧void* p=malloc(sizeof(double)10000); double q=(double*)p;q[0]=1.23456789012345678901234567890...然后free(p)之前要先赋值NULL p=NULL free(p)避免出问题

#include<iostream>
using namespace std;
#include <string>
class Student
{
protected:
    string name;
    float math;
    float chinese;
    float english;
public:
    Student() {}
    Student(string n,float m,float c,float e) : name(n),math(m),chinese(c),english(e) {}
    Student(const Student &s)
    {
        name = s.name;
        math = s.math;
        chinese = s.chinese;
        english = s.english;
    }
    ~Student() {}
    string getName() {return name;}
    float sum() {return math+chinese+english;}
    float avg() {return sum()/3;}
};

int main()
{
    cout<<"请输入学生的姓名、语文成绩、数学成绩、英语成绩:"<<endl;
    Student s[5];
    string name;
    float m,c,e;
    int max;
    for(int i=0;i<5;i++)
    {
        cin>>name>>m>>c>>e;
        s[i] = Student(name,m,c,e);
        if(i==0 || s[i].sum() > s[max].sum())
            max = i;
    }
    cout<<"姓名:"<<s[max].getName()<<endl;
    cout<<"总成绩:"<<s[max].sum()<<endl;
    cout<<"平均成绩:"<<s[max].avg()<<endl;
}


#include <iostream>
#include <string>
using namespace std;
class Student{
public:
    Student(){}
    Student(string name_,double math_,double chinese_,double english_):name(name_),math(math_),chinese(chinese_),english(english_){}
    ~Student(){};
    void showName(){
        cout<<name<<" ";
    } 
    double sum();
    double avg();
     void in();
private:
        string name;
        double math;
         double chinese;
        double english;
};
double Student::sum(){
    return math+chinese+english;
}
double Student::avg(){
    return (math+chinese+english)/3;
}
void Student::in(){
        cin>>name;
        cin>>chinese;
        cin>>math;
        cin>>english;
}
int main(){
    Student stu[5];
    cout<<"请输入学生的姓名、语文成绩、数学成绩、英语成绩:"<<endl;
    Student first=stu[0];
    for(int i=0;i<5;i++){
        stu[i].in();
        if(stu[i].sum()>first.sum()){
            first=stu[i];
        }
    }
    cout<<"总成绩第一名:"<<endl;
    cout<<"学生姓名:";
    first.showName();
    cout<<endl;
    cout<<"总成绩:"<<first.sum()<<endl;
    cout<<"平均成绩:"<<first.avg()<<endl;
    return 0; 
}