鱼C论坛

 找回密码
 立即注册
查看: 674|回复: 7

[已解决]C++设计一个小程序

[复制链接]
发表于 2020-4-22 15:32:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.设计一个学生类,数据成员包括:学号、姓名、性别、成绩。使用友元函数实现计算总成绩、计算平均成绩、输出。
2.修改完善上述类,重载“>”“<”“==”运算符,使之能够实现学生的比较,规则为比较两学生的总成绩大小。尝试在重载函数形参中使用const。
最佳答案
2020-4-22 16:21:52
#include <iostream>
#include <string>
using namespace std;
 
class Student
{
    private:
        string num;
        string name;
        char sex;
        float english,math,history,physics;
    public:
        friend void calculate(Student &stu);
        Student(string nu,string na,char se='M',float en=0,float ma=0,float hi=0,float ph=0)
        {
            num=nu;
            name=na;
            sex=se;
            english=en;
            math=ma;
            history=hi;
            physics=ph;
        }

        string getName()
        {
            return name;
        }
      // 重载 < 运算符
        bool operator <( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 < sum2)
            {
                return true;
            }
            return false;
        }    
      // 重载 > 运算符
        bool operator >( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 > sum2)
            {
                return true;
            }
            return false;
        }    
      // 重载 == 运算符
        bool operator ==( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 == sum2)
            {
                return true;
            }
            return false;
        }    
};
void calculate(Student& stu)
{
    float sum,ave;
    sum=stu.english+stu.math+stu.physics+stu.history;
    ave=sum/4;
    cout<<stu.name<<"的总成绩:"<<sum<<",平均成绩:"<<ave<<endl;
}
// 程序的主函数
int main( )
{
    Student stu1("001","Jone",'M',80,80,80,80);
    Student stu2("002","Jane",'F',80,80,80,80);
    Student stu3("003","Ann",'F',81,82,83,84);
    
    calculate(stu1);
    calculate(stu2);
    calculate(stu3);
    
    if (stu1==stu2)
        cout<<stu1.getName()<<"与"<<stu2.getName()<<"总成绩一样。"<<endl;
    if (stu3>stu2)
        cout<<stu3.getName()<<"的总成绩高于"<<stu2.getName()<<"的总成绩。"<<endl;
    if (stu1<stu3)
        cout<<stu1.getName()<<"的总成绩低于"<<stu3.getName()<<"的总成绩。"<<endl;
    
    return 0;
}
Jone的总成绩:320,平均成绩:80
Jane的总成绩:320,平均成绩:80
Ann的总成绩:330,平均成绩:82.5
Jone与Jane总成绩一样。
Ann的总成绩高于Jane的总成绩。
Jone的总成绩低于Ann的总成绩。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-22 15:38:11 From FishC Mobile | 显示全部楼层
。。。。。这么基础的课堂作业不自己完成真的好么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-22 15:39:10 | 显示全部楼层
倒戈卸甲 发表于 2020-4-22 15:38
。。。。。这么基础的课堂作业不自己完成真的好么?

分享给大家,看大家有什么更优化的代码没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-22 15:43:00 From FishC Mobile | 显示全部楼层
ttyule1 发表于 2020-4-22 15:39
分享给大家,看大家有什么更优化的代码没

我晚饭后写一个看看。优化是不大可能了,因为运算符重载的代码是固定的。代码的细节方面看看能不能写得讲究一点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-22 15:43:43 | 显示全部楼层
倒戈卸甲 发表于 2020-4-22 15:43
我晚饭后写一个看看。优化是不大可能了,因为运算符重载的代码是固定的。代码的细节方面看看能不能写得讲 ...

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-22 15:49:29 | 显示全部楼层
ttyule1 发表于 2020-4-22 15:39
分享给大家,看大家有什么更优化的代码没

分享?
那你倒是先写一个分享一下啊~~
总感觉你这是在找人代写作业。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-22 16:21:32 | 显示全部楼层
sunrise085 发表于 2020-4-22 15:49
分享?
那你倒是先写一个分享一下啊~~
总感觉你这是在找人代写作业。。。。

sorry,作业已经交了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-22 16:21:52 | 显示全部楼层    本楼为最佳答案   
#include <iostream>
#include <string>
using namespace std;
 
class Student
{
    private:
        string num;
        string name;
        char sex;
        float english,math,history,physics;
    public:
        friend void calculate(Student &stu);
        Student(string nu,string na,char se='M',float en=0,float ma=0,float hi=0,float ph=0)
        {
            num=nu;
            name=na;
            sex=se;
            english=en;
            math=ma;
            history=hi;
            physics=ph;
        }

        string getName()
        {
            return name;
        }
      // 重载 < 运算符
        bool operator <( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 < sum2)
            {
                return true;
            }
            return false;
        }    
      // 重载 > 运算符
        bool operator >( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 > sum2)
            {
                return true;
            }
            return false;
        }    
      // 重载 == 运算符
        bool operator ==( Student& stu)
        {
            float sum1=0,sum2=0;
            sum1=english+math+physics+history;
            sum2=stu.english+stu.math+stu.physics+stu.history;
            if(sum1 == sum2)
            {
                return true;
            }
            return false;
        }    
};
void calculate(Student& stu)
{
    float sum,ave;
    sum=stu.english+stu.math+stu.physics+stu.history;
    ave=sum/4;
    cout<<stu.name<<"的总成绩:"<<sum<<",平均成绩:"<<ave<<endl;
}
// 程序的主函数
int main( )
{
    Student stu1("001","Jone",'M',80,80,80,80);
    Student stu2("002","Jane",'F',80,80,80,80);
    Student stu3("003","Ann",'F',81,82,83,84);
    
    calculate(stu1);
    calculate(stu2);
    calculate(stu3);
    
    if (stu1==stu2)
        cout<<stu1.getName()<<"与"<<stu2.getName()<<"总成绩一样。"<<endl;
    if (stu3>stu2)
        cout<<stu3.getName()<<"的总成绩高于"<<stu2.getName()<<"的总成绩。"<<endl;
    if (stu1<stu3)
        cout<<stu1.getName()<<"的总成绩低于"<<stu3.getName()<<"的总成绩。"<<endl;
    
    return 0;
}
Jone的总成绩:320,平均成绩:80
Jane的总成绩:320,平均成绩:80
Ann的总成绩:330,平均成绩:82.5
Jone与Jane总成绩一样。
Ann的总成绩高于Jane的总成绩。
Jone的总成绩低于Ann的总成绩。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表