流萤k423 2024-04-01 18:36 采纳率: 84.4%
浏览 7
已结题

定义一个生日类 Birthday(2)

定义一个生日类 Birthday
数据成员(访问权限定义为protected):

年、月、日

成员函数(访问权限定义为public):

构造函数:数据成员初始化(年、月、日)

拷贝构造函数:数据成员初始化 Birthday(const Birthday &birth);

修改生日信息:设置新的年、月、日

打印生日信息

要求:将类的定义与类成员函数的实现分开。

定义一个学生类Student

数据成员(访问权限定义为protected):

学生姓名(char *name)、性别(bool sex)、学号、出生日期(Birthday birth)、专业课门数、专业课成绩(double *score)

成员函数(访问权限定义为public):

构造函数:对学生的姓名、性别、学号、出生日期、专业课门数进行初始化

Student(char *_name, bool _sex, int _sno, int year, int month, int day, int _num);

注意:在构造函数中为score申请堆空间数组

拷贝构造函数:数据成员初始化(避免浅拷贝)

Student(const Student &st);

析构函数:释放系统资源(堆空间)

录入专业课的成绩 void input(double *s); 或 void input(double s[ ]);

修改某门专业课的成绩 void change(int i, double s);

计算专业课平均成绩

计算不及格专业课的门数

显示学生基本信息

要求:将类的定义与类成员函数的实现分开。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-01 18:36
    关注

    引自免费微信小程序:皆我百晓生

    好的,让我们开始。首先,我们需要定义一个名为Student的类。这个类有两个数据成员:一个是学生的姓名(char类型的字符串),另一个是学生的性别(布尔类型的值)。此外,还有一组公共成员函数,它们都是为了方便使用而设计的。以下是这个类的定义:

    #include <iostream>
    #include <string>
    
    class Student {
    private:
        std::string name;
        bool isMale;
        int sno;
        int year;
        int month;
        int day;
    
        // 公共成员函数
    public:
        Student(const std::string &name, bool isMale, int sno, int year, int month, int day) : name(name), isMale(isMale), sno(sno), year(year), month(month), day(day) {}
    
        std::string getName() const { return name; }
    
        bool getIsMale() const { return isMale; }
    
        int getSno() const { return sno; }
    
        int getYear() const { return year; }
    
        int getMonth() const { return month; }
    
        int getDay() const { return day; }
    
        void setName(const std::string &newName) {
            name = newName;
        }
    
        void setIsMale(bool newIsMale) {
            isMale = newIsMale;
        }
    
        void setSno(int newSno) {
            sno = newSno;
        }
    
        void setYear(int newYear) {
            year = newYear;
        }
    
        void setMonth(int newMonth) {
            month = newMonth;
        }
    
        void setDay(int newDay) {
            day = newDay;
        }
    
        void input(double *s) {
            for (int i = 0; i < *s; ++i)
                std::cout << "* ";
        }
    
        void input(double *s[]) {
            for (int i = 0; i < *s; ++i)
                std::cout << "* ";
        }
    };
    

    接下来,我们来看看定义一个名为Student的类的继承情况。在这个例子中,我们将创建一个派生类,叫做AdvancedStudent,它继承自Student。这是一个简单的示例,用于展示如何从父类继承字段并覆盖这些字段:

    #include <iostream>
    #include <string>
    
    class Student {
    private:
        std::string name;
        bool isMale;
        int sno;
        int year;
        int month;
        int day;
    
    public:
        Student(const std::string &name, bool isMale, int sno, int year, int month, int day) : name(name), isMale(isMale), sno(sno), year(year), month(month), day(day) {}
    
        std::string getName() const { return name; }
    
        bool getIsMale() const { return isMale; }
    
        int getSno() const { return sno; }
    
        int getYear() const { return year; }
    
        int getMonth() const { return month; }
    
        int getDay() const { return day; }
    
        void setName(const std::string &newName) {
            name = newName;
        }
    
        void setIsMale(bool newIsMale) {
            isMale = newIsMale;
        }
    
        void setSno(int newSno) {
            sno = newSno;
        }
    
        void setYear(int newYear) {
            year = newYear;
        }
    
        void setMonth(int newMonth) {
            month = newMonth;
        }
    
        void setDay(int newDay) {
            day = newDay;
        }
    
        void input(double *s) {
            for (int i = 0; i < *s; ++i)
                std::cout << "* ";
        }
    
        void input(double *s[]) {
            for (int i = 0; i < *s; ++i)
                std::cout << "* ";
        }
    };
    
    class AdvancedStudent : public Student {
    private:
        double* score;
    
    public:
        AdvancedStudent(const std::string &name, bool isMale, int sno, int year, int month, int day, double *score)
            : Student(name, isMale, sno, year, month, day) {
            this->score = score;
        }
    
        double* getScore() const { return score; }
    
        // 使用已知的学生分数作为输入,并返回新评分
        double* inputScore(double s) {
            *this->score = s;
            return *this->score;
        }
    };
    

    这只是一个非常基础的例子,实际的程序可能包含更多的功能和错误检查。例如,在上面的inputScore函数中,我们需要处理输入为空的情况,并在输出时只显示空格。同时,如果你需要修改某个门类的成绩,你应该重新调用这个方法,并提供相应的参数。在上述示例中,我们没有添加任何特殊的操作,但如果你想添加一些额外的功能,比如输入分数到系统之外的数据库等,你需要根据你的具体需求来实现这部分代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 欧拉系统opt目录空间使用100%
  • ¥15 ul做导航栏格式不对怎么改?
  • ¥20 用户端如何上传图片到服务器和数据库里
  • ¥15 现在研究生在烦开题,看了一些文献,但不知道自己要做什么,求指导。
  • ¥30 vivado封装时总是显示缺少一个dcp文件
  • ¥100 pxe uefi启动 tinycore
  • ¥15 我pycharm运行jupyter时出现Jupyter server process exited with code 1,然后打开cmd显示如下
  • ¥15 可否使用carsim-simulink进行四轮独立转向汽车的联合仿真,实现四轮独立转向汽车原地旋转、斜向形式、横移等动作,如果可以的话在carsim中如何进行相应设置
  • ¥15 Caché 2016 在Java环境通过jdbc 执行sql报Parameter list mismatch错误,但是同样的sql使用连接工具可以查询出数据
  • ¥15 疾病的获得与年龄是否有关