学生类(静态数据成员和静态成员函数,即数据的共享)

【问题描述】
定义一个类Student,要求使用静态数据成员或静态成员函数计算全班学生的《计算机导论》课程的总成绩和平均成绩。请同学们自行设计该类。

【提示】
静态数据成员:static int total; 表示所有同学成绩总分
静态成员函数:static void Average(int sum){} 计算sum个学生的平均成绩,主函数在调用的时候采用Student::Average(n)的形式。

【输入形式】
学生姓名 课程成绩

【输出形式】
总成绩和平均成绩

【样例输入】
Zhang 82
Li 79
Wang 93
Liu 66
Xia 90

【样例输出】
410
82

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

class Student
{
private:
    char * name;
    int grade;
public:
    Student(const char * n, int g);//构造函数
    ~Student();//析构函数
    static void Average(int sum);//静态成员函数
    static int total;//静态数据成员
};

int Student::total = 0;//静态数据成员要在类外初始化,而且不能加static

Student::Student(const char * n, int g)//构造函数
{
    int len = strlen(n);
    name = new char[len+1];
    strcpy(name,n);
    grade = g;
    total += grade;
}

Student::~Student()//析构函数
{
    delete [] name;
}

void Student::Average(int sum)//静态成员函数,同样不能写static
{
    cout << total/sum << endl;
}

int main()
{
    char name[10];//不要用char * name;不仅无法初始化,而且程序下面运行会出错
    int grade = 0, Count = 0;//计人数
    while(cin >> name >> grade)//当输入数据类型和变量类型不匹配就出错,返回假值;输入ctrl+Z也可以结束输入。
    {
        Student x(name,grade);
        Count++;
    }
    cout << Student::total << endl;
    Student::Average(Count);
    return 0;
}

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: re(int x)用来修改学生的分数,成员函数display()用来输出学生的信息。 class student { private: int id; string name; int score; static int total; static int count; public: student(int i, string n, int s) { id = i; name = n; score = s; total += s; count++; } void changescore(int x) { total -= score; score = x; total += x; } void display() { cout << "学号:" << id << endl; cout << "姓名:" << name << endl; cout << "分数:" << score << endl; } }; int student::total = ; int student::count = ; ### 回答2: 学生类是一个非常常见的类,它通常用于表示一个学生的信息,包括学号、姓名和分数等。在本题中,我们需要定义一个学生类Student,该类包括三个数据成员:学号id、姓名name和分数score,以及两个静态数据成员:总分total和学生人数count。构造函数用来初始化对象,成员函数changesco用来修改学生的分数。 首先,我们需要定义一个学生类Student: class Student { public: // 构造函数 Student(int id, const std::string& name, double score) :id_(id), name_(name), score_(score) { total_ += score; count_++; } // 成员函数 void changesco(double score) { total_ += score - score_; score_ = score; } // 静态数据成员 static double total_; // 总分 static int count_; // 学生人数 private: // 数据成员 int id_; // 学号 std::string name_; // 姓名 double score_; // 分数 }; 需要注意的是,我们在构造函数中使用了成员列表来初始化数据成员,并且在初始化时进行了总分和学生人数的累加。此外,我们在成员函数changesco中修改了分数,并更新了总分。 接下来,我们需要在类外定义静态数据成员total_和count_: double Student::total_ = 0; // 总分初始化为0 int Student::count_ = 0; // 学生人数初始化为0 在实际应用中,我们可以创建多个学生类的对象,如下所示: Student s1(1, "张三", 90); Student s2(2, "李四", 70); Student s3(3, "王五", 80); 此时,总分total_和学生人数count_的值会自动更新为270和3。 最后,我们可以通过调用成员函数changesco来修改学生的分数,如下所示: s1.changesco(95); // 修改张三的分数为95 经过修改后,总分total_的值也会相应地发生变化。 综上所述,通过定义一个包括3个数据成员和2个静态数据成员学生类Student,并提供带参数的构造函数成员函数changesco,可以非常方便地管理多个学生的信息,并进行相应的操作。 ### 回答3: 学生类(Student)是一种用于描述学生信息的类。该类包含三个数据成员:学号(id)、姓名(name)和分数(score),以及两个静态数据成员:总分(total)和学生人数(count)。其中,学号、姓名和分数是每个学生独有的数据,而总分和学生人数则是全局共享数据。 在该类中,我们需要定义一个带参数的构造函数用来初始化对象,并将每个学生的学号、姓名和分数赋给对应的数据成员。同时,我们需要为该类定义一个名为“changesco”的成员函数,该函数用于修改学生的分数。其参数为一个整型值,表示要将原始分数加上多少(可以为负数)。该函数首先检查传入的参数是否合法,例如分数不能为负数,然后再对学生的分数进行修改。 下面是一个学生类的实现: ```c++ class Student { private: int id; // 学号 string name; // 姓名 int score; // 分数 static int total; // 总分 static int count; // 学生人数 public: Student(int id, string name, int score) { // 带参数的构造函数 this->id = id; this->name = name; this->score = score; total += score; count++; } void changesco(int delta) { // 修改分数 if (delta < 0 && score < -delta) { cout << "Invalid delta!" << endl; } else { total += delta; score += delta; } } static int get_total() { // 返回总分 return total; } static float get_average() { // 返回平均分 return total / (float)count; } }; ``` 在上面的实现中,我们使用了关键字“static”来定义了两个静态数据成员:总分(total)和学生人数(count)。由于这两个数据成员是全局共享的,所以它们必须声明为静态的才能够被所有对象所访问。 除此之外,我们还定义了一个名为“get_total”的静态成员函数,用来返回当前所有学生的总分。该函数不需要访问任何对象的成员,因此也需要声明为静态的。同理,我们还定义了一个名为“get_average”的静态成员函数,用来返回当前所有学生的平均分。 总之,学生类是一个用于描述学生信息的类,它包含学号、姓名、分数三个数据成员和总分、学生人数两个静态数据成员。我们可以通过带参数的构造函数初始化学生对象,并使用成员函数“changesco”来修改学生的分数。同时,通过静态成员函数“get_total”和“get_average”来获取总分和平均分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值