黑马程序员-------运算符重载(二)

时间:2021-12-07 12:02:10

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

1、逻辑运算符|&,!也可以重载,从而应用与自定义的类的运算,就像其默认的功能,从而返回一个bool 类型的值,我们也可以定义它返回其他类型的值,但是,它们的返回值最好还是定义个bool类型的值,以防造成混乱。

2、重载关系运算符,并且在结束后返回一个bool类型的值。

需要注意的是,有的运算符是需要成对重载的,例如><>=<===!=等等,不然在编译的时候,会报错。

假设下面的例子是:两个公司,通过重载运算符,得出是否应该合并,当人数小于一定数量的时候,判断bool 值得出的是真还是假,从而判断该公司是否应该合并。

这样的好处就是,我们不必知道每个班级的人数,从而判断出是否应该合并。

     3、对于运算符的重载,当我们使用的时候,要注意两点:

(1)维持运算符的原始意义,就是按照运算符的功能,重载后的功能是一样的,不然会对系统的构架有不良的影响,从而影响系统整个性能。

(2)有些运算符是不能够重载的例如:=&&||等。

下面是重载逻辑运算符:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace _04

{

    class Program

    {

        static void Main(string[] args)

        {

            int stu;

            stu = 10;

            bool flag;

            bool huo;

            bool fei;

            Company c = new Company();

            Company csum = new Company();

            Company csub = new Company();

            Company zero = new Company();

            zero = zero - 30;

            

 

            Console.WriteLine(c.stu);

            csum = csum + stu;

            Console.WriteLine(csum.stu);

            csub = csub - stu;

            Console.WriteLine(csub.stu);

            flag = csum & csub;

            if (flag == true)

            {

                Console.WriteLine("两公司可以合并");

            }

            if (flag == false)

            {

                Console.WriteLine("两公司不可以合并");

            }

            huo = zero | c;

            if (huo == true)

            {

                Console.WriteLine("两公司可以合并");

            }

            if (huo == false)

            {

                Console.WriteLine("两公司不可以合并");

            }

            fei = !zero;

             if(fei==true )

             {

                 Console .WriteLine ("公司没有人,必须撤销!");

             }

             else

             {

                 Console .WriteLine ("公司还有人,不能撤销");

             }

            Console.ReadKey();

 

        }

    }

    class Company

    {

        public int stu;

        public Company()

        {

            stu = 30;

        }

        public static Company operator +(Company c, int sum)

        {

            int stu;

             stu = c.stu + sum;

            Company myc = new Company();

            myc.stu = stu;

             return myc;

        }

        public static Company operator -(Company c, int sub)

        {

            int stu;

            stu = c.stu - sub;

            Company myc = new Company();

            myc.stu = stu;

            return myc;

        }

        public static bool operator &(Company c1, Company c2)

        {

            bool flag;

            if (c1.stu + c2.stu >= 50)

            {

                flag = false;

            }

            else

            {

                flag = true;

            }

            return flag;

        }

        public static bool operator |(Company c1, Company c2)

        {

            bool flag;

            if (c1.stu == 0 || c2.stu ==0)

            {

                flag = true;

            }

            else

            {

                flag = false;

            }

            return flag;

        }

        public static bool operator !(Company c)

        {

            bool flag;

            if (c.stu == 0)

            {

                flag = true;

            }

            else

            {

                flag = false;

            }

            return flag;

        }

 

    }

}

下面的例子是重载关系运算符,这是就需要上面提到的内容,需要成对出现,不能只重载一种运算符。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace _01

{

    class Program

    {

        static void Main(string[] args)

        {

 

            int com;

            bool flag;

            Company c = new Company();

            Company csum = new Company();

            Company csub = new Company();

            com = 20;

            Console.WriteLine(c.total);

            csum = csum + com;

            Console.WriteLine(csum.total);

            csub = csub - com;

            Console.WriteLine(csub.total);

            flag = csum > csub;

            if (flag == true)

            {

                Console.WriteLine("csum公司人数大于csub公司人数");

            }

            else

            {

                Console.WriteLine("csum公司人数小于csub公司人数");

            }

            

            flag = csub<csum;

            if (flag == true)

            {

                Console.WriteLine("csub公司人数小于csum公司人数");

            }

            else

            {

                Console.WriteLine("csub公司人数大于csum公司人数");

            }

            Company c1 = new Company();

            Company c2 = new Company();

            flag=c1.Equals(c1);

            com  = c1.GetHashCode();

            Console.WriteLine(com);

            Console.WriteLine(flag);

 

 

            Console.ReadKey();

        }

    }

    class Company

    {

        public int total;

        public Company()

        {

            total = 30;

        }

        public static Company operator +(Company c, int num)

        {

            Company myc = new Company();

            myc = c;

            myc.total = c.total + num;

            return myc;

        }

        public static Company operator -(Company c, int sub)

        {

            Company myc = new Company();

            myc = c;

            myc.total = c.total - sub;

            return myc;

        }

        public static bool operator >(Company c1, Company c2)

        {

            bool flag;

            if (c1.total  > c2.total )

            {

                flag = true;

            }

            else 

            {

                flag = false;

            }

            return flag;

        }

        public static bool operator <(Company c1, Company c2)

        {

            bool flag;

            if (c1.total < c2.total)

            {

                flag = true;

            }

            else

            {

                flag = false;

            }

            return flag;

        }

    }

}

 

  ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------