Windows课程作业重载运算符

问题:如何实现对象集合的比较


前言

题目描述:

  1. 题目说明:学生类包括成绩、科目和学号,请根据课程成绩grade将学生进行排序。
  2. 部分代码如下,请将代码补充完整
public class Student : IComparable

{

    public double mygrade;

    public string mysubject, myID;

    public Student() { }

    public Student(double grade, string subject, string id)

    {

        mygrade = grade;

        mysubject = subject;

        myID = id;

    }

   请在此处添加关键代码···

}



internal class Program

{

    

    private static void Main(string[] args)

    {

        Student[] students = new Student[5];

        students[0] = new Student(50.0, "windows程序设计", "001");

        students[1] = new Student(90.0, "windows程序设计", "002");

        students[2] = new Student(100.0, "windows程序设计", "003");

        students[3] = new Student(70.0, "windows程序设计", "004");

        students[4] = new Student(80.0, "windows程序设计", "005");

      请在此处添加关键代码···

    }



}

一、函数重载

  

         函数重载是一种特殊情况,C(++/#)允许在同一作用域中声明几个类似的同名函数这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题.在C(++/#)中不仅函数可以重载,运算符也可以重载。

          但是要注意在C#中重载需要将方法声明成静态

二、具体实现

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace overload
{
    
    public class Student : IComparable
    {
        public double mygrade;
        public string mysubject, myID;
        public Student() { }
        public Student(double grade, string subject, string id)
        {
            mygrade = grade;
            mysubject = subject;
            myID = id;
        }


        public void show_stu()
        {
            Console.WriteLine("成绩:{0},科目:{1},学号:{2}", mygrade, mysubject, myID);
        }
        public static bool operator  > (Student b, Student c)
        {
            return b.mygrade > c.mygrade;
        }//重载>号
        public static bool operator <(Student b, Student c)
        {
            return b.mygrade < c.mygrade;
        }//重载<号
        public void quick_sort(Student[] student, int l, int r)
        {
            if (l >= r) return;
            int i = l - 1, j = r + 1;
            Student x = student[l + r >> 1];
            while (i < j)
            {
                do i++; while (student[i] < x);
                do j--; while (student[j] > x);
                if (i < j)
                {
                    Student tmp = student[i];
                    student[i] = student[j];
                    student[j] = tmp;
                }
            }
            quick_sort(student, l, j);
            quick_sort(student, j + 1, r);
        }//根据成绩快速排序
        //请在此处添加关键代码···
    }
    public class IComparable
    {
        

    }

    internal class Program
    {

        private static void Main(string[] args)
        {
            Student[] students = new Student[5];
            students[0] = new Student(50.0, "windows程序设计", "001");
            students[1] = new Student(90.0, "windows程序设计", "002");
            students[2] = new Student(100.0, "windows程序设计", "003");
            students[3] = new Student(70.0, "windows程序设计", "004");
            students[4] = new Student(80.0, "windows程序设计", "005");

            students[0].quick_sort(students, 0, 4);
            for(int i = 0;i< students.Length;i++) 
            {
                students[i].show_stu();
            }
            //请在此处添加关键代码···
    }

    }
}

运行结果:


 

总结

总的来说C#中的重载和C++中几乎无异,但是要注意要声明位静态。实现对象的比较要重载运算符,然后就可以根据自己设定要比较对象进行排序,至于排序就很简单了,冒泡、快速、归并等排序都可以实现,我这里使用的是快速排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值