0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是运算符重载

汽车电子技术 来源:程序猿知秋 作者: 程序猿知秋 2023-01-20 15:30 次阅读

运算符重载

基本概念

  • 我们可以重定义或重载 C# 中内置的运算符
  • 可以使用用户自定义类型的运算符
  • 重载运算符是具有 特殊名称的函数 ,是通过关键字 ** operator **后跟运算符的符号来定义的
  • 与其他函数一样,重载运算符有****返回类型和参数列表
  • 使用 operator 关键字来声明运算符。 运算符声明必须符合以下规则
    • 同时包含 public 和 static 修饰符
    • 一元运算符有一个输入参数,二元运算符有两个输入参数
  • **语法示例: 正面的class 表示用户自定义的类,以下是重载 + **
public static Class operator+ (Class a, Class b)

使用案例

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car1 = new Car();
            car1.length=2;
            car1.speed = 120;


            Car car2 = new Car();
            car2.length = 3;
            car2.speed = 90;
            // 将两个car对象相加
            Car c3 = car1 + car2;
            Console.WriteLine(c3);  // output: length:5,speed:210
        }
    }




    public class Car
    {
        /// 
        /// 长度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重载 对象的 +
        public static Car operator +(Car c1, Car c2)
        {
            Car c3 = new Car();
            c3.length = c1.length + c2.length;
            c3.speed = c1.speed + c2.speed;
            return c3;
        }


        // 重写tostring方法,方便打印对象信息
        public override string ToString()
        {
            return string.Format("length:{0},speed:{1}", this.length, this.speed);
        }


    }
}

**如果不使用重载也想要达成以上效果,作法如下:

**

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car1 = new Car();
            car1.length=2;
            car1.speed = 120;


            Car car2 = new Car();
            car2.length = 3;
            car2.speed = 90;

            // 将两个car对象相加
            Car car3 = new Car();
            car3.length = car1.length + car2.length;
            car3.speed = car1.speed + car2.speed;
            Console.WriteLine(car3);  // output: length:5,speed:210
        }
    }




    public class Car
    {
        /// 
        /// 长度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重载 对象的 +
        public static Car operator +(Car c1, Car c2)
        {
            Car c3 = new Car();
            c3.length = c1.length + c2.length;
            c3.speed = c1.speed + c2.speed;
            return c3;
        }


        // 重写tostring方法,方便打印对象信息
        public override string ToString()
        {
            return string.Format("length:{0},speed:{1}", this.length, this.speed);
        }


    }
}

可以看到效果,如果不重载运算符,则需要在外面调用时 自己去计算,以上只有一处调用,是否重载无所谓,但是如果 调用的地方多了,每个调用的地方都得写此逻辑就太麻烦了,所以用好运算符重载还是很好用的

重载多个运算符实现

using System;


namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car1 = new Car();
            car1.length = 2;
            car1.speed = 120;
            // 利用重载的 true/false 运算符
            if (car1)
            {
                Console.WriteLine(car1);  // output: length:2,speed:120
            }



            Car car2 = new Car();
            car2.length = 3;
            car2.speed = 90;
            // 将两个car对象相加
            Car c3 = car1 + car2;
            Console.WriteLine(c3);  // output: length:5,speed:210


            // 相减
            c3 = car1 - car2;
            Console.WriteLine(c3);  // output: length:-1,speed:30


            // 比较
            if (car1 != car2)
            {
                Console.WriteLine("我们不相等");
            }


        }
    }




    public class Car
    {
        /// 
        /// 长度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重载 对象的 +
        public static Car operator +(Car c1, Car c2)
        {
            Car c3 = new Car();
            c3.length = c1.length + c2.length;
            c3.speed = c1.speed + c2.speed;
            return c3;
        }


        // 重载 对象的 -
        public static Car operator -(Car c1, Car c2)
        {
            Car c3 = new Car();
            c3.length = c1.length - c2.length;
            c3.speed = c1.speed - c2.speed;
            return c3;
        }


        // 重载 对象的 ==, 注 == 和 != 是一对的,重写了一个,两个就都必须重写
        public static bool operator ==(Car c1, Car c2)
        {
            return c1.length == c2.length && c1.speed == c2.speed;
        }


        // 重载 对象的 !=
        public static bool operator !=(Car c1, Car c2)
        {
            return c1.length != c2.length || c1.speed != c2.speed;
        }


        // 重载 对象的 true,  true和false也是一对
        public static bool operator true(Car c1)
        {
            return c1.length != 0  || c1.speed != 0;
        }


        // 重载 对象的 false
        public static bool operator false(Car c1)
        {
            return c1.length == 0 && c1.speed == 0;
        }


        // 重写tostring方法,方便打印对象信息
        public override string ToString()
        {
            return string.Format("length:{0},speed:{1}", this.length, this.speed);
        }


    }
}

可重载和不可重载的运算****符

可被重载的 不可被重载的
+, -, !, ~, ++, --,*, /, % &&,
==, !=, <, >, <=, >= =, ., ?:, ->, new, is, sizeof, typeof
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • 运算符
    +关注

    关注

    0

    文章

    163

    浏览量

    10946
  • 重载
    +关注

    关注

    0

    文章

    7

    浏览量

    2741
收藏 人收藏

    评论

    相关推荐

    C++重载运算符重载函数详解

    在计算机程序设计中,运算符重载(英语:operator overloading)是多态的一种。这里,运算符(比如+,=或==)被当作多态函数,它们的行为随着其参数类型的不同而不同。运算符
    发表于 09-20 17:14 417次阅读

    [7.1.1]--6.1运算符重载概述

    编程语言C++
    jf_75936199
    发布于 :2023年01月10日 10:41:29

    [7.3.1]--6.3成员运算符重载函数

    编程语言C++
    jf_75936199
    发布于 :2023年01月10日 10:43:09

    [2.2.1]--运算符重载的规则

    C语言
    jf_75936199
    发布于 :2023年02月24日 15:47:51

    [13.1.4]--友元和运算符重载

    程序设计面向对象编程
    jf_75936199
    发布于 :2023年03月06日 23:04:21

    [13.3.2]--插入运算符和提取运算符重载

    程序设计面向对象编程
    jf_75936199
    发布于 :2023年03月06日 23:09:11

    [8.5.1]--运算符重载_clip001

    python
    jf_75936199
    发布于 :2023年03月13日 14:19:38

    [8.5.1]--运算符重载_clip002

    python
    jf_75936199
    发布于 :2023年03月13日 14:20:19

    函数运算符重载(2)#程序设计

    程序设计
    未来加油dz
    发布于 :2023年07月10日 16:27:56

    运算符重载(1)#程序设计

    程序设计
    未来加油dz
    发布于 :2023年07月10日 16:46:35

    赋值运算符重载(1)#程序设计

    程序设计
    未来加油dz
    发布于 :2023年07月10日 16:57:44

    赋值运算符重载(2)#程序设计

    程序设计
    未来加油dz
    发布于 :2023年07月10日 16:58:29

    友元和运算符重载(2)#程序设计

    程序设计
    未来加油dz
    发布于 :2023年07月13日 17:58:03

    C++程序设计教程之运算符重载的详细资料说明

    本文档详细介绍的是C++程序设计教程之运算符重载的详细资料说明主要内容包括了:1. 什么是运算符重载,2. 运算符
    发表于 03-14 16:04 4次下载
    C++程序设计教程之<b class='flag-5'>运算符</b><b class='flag-5'>重载</b>的详细资料说明

    干货:三大实例讲解三种C++运算符重载

    本章节主要讲解是运算符重载运算符重载是赋予运算符能操作自定义类型的功能。C++运算符
    的头像 发表于 09-30 16:59 3187次阅读
    干货:三大实例讲解三种C++<b class='flag-5'>运算符</b><b class='flag-5'>重载</b>