RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是運(yùn)算符重載

汽車電子技術(shù) ? 來(lái)源:程序猿知秋 ? 作者: 程序猿知秋 ? 2023-01-20 15:30 ? 次閱讀

運(yùn)算符重載

基本概念

  • 我們可以重定義或重載 C# 中內(nèi)置的運(yùn)算符
  • 可以使用用戶自定義類型的運(yùn)算符
  • 重載運(yùn)算符是具有 特殊名稱的函數(shù) ,是通過(guò)關(guān)鍵字 ** operator **后跟運(yùn)算符的符號(hào)來(lái)定義的
  • 與其他函數(shù)一樣,重載運(yùn)算符有****返回類型和參數(shù)列表
  • 使用 operator 關(guān)鍵字來(lái)聲明運(yùn)算符。 運(yùn)算符聲明必須符合以下規(guī)則
    • 同時(shí)包含 public 和 static 修飾符
    • 一元運(yùn)算符有一個(gè)輸入?yún)?shù),二元運(yùn)算符有兩個(gè)輸入?yún)?shù)
  • **語(yǔ)法示例: 正面的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;
            // 將兩個(gè)car對(duì)象相加
            Car c3 = car1 + car2;
            Console.WriteLine(c3);  // output: length:5,speed:210
        }
    }




    public class Car
    {
        /// 
        /// 長(zhǎng)度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重載 對(duì)象的 +
        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方法,方便打印對(duì)象信息
        public override string ToString()
        {
            return string.Format("length:{0},speed:{1}", this.length, this.speed);
        }


    }
}

**如果不使用重載也想要達(dá)成以上效果,作法如下:

**

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;

            // 將兩個(gè)car對(duì)象相加
            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
    {
        /// 
        /// 長(zhǎng)度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重載 對(duì)象的 +
        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方法,方便打印對(duì)象信息
        public override string ToString()
        {
            return string.Format("length:{0},speed:{1}", this.length, this.speed);
        }


    }
}

可以看到效果,如果不重載運(yùn)算符,則需要在外面調(diào)用時(shí) 自己去計(jì)算,以上只有一處調(diào)用,是否重載無(wú)所謂,但是如果 調(diào)用的地方多了,每個(gè)調(diào)用的地方都得寫此邏輯就太麻煩了,所以用好運(yùn)算符重載還是很好用的

重載多個(gè)運(yùn)算符實(shí)現(xiàn)

using System;


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



            Car car2 = new Car();
            car2.length = 3;
            car2.speed = 90;
            // 將兩個(gè)car對(duì)象相加
            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
    {
        /// 
        /// 長(zhǎng)度
        /// 
        public int length;
        /// 
        /// 速度
        /// 
        public int speed;


        // 重載 對(duì)象的 +
        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;
        }


        // 重載 對(duì)象的 -
        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;
        }


        // 重載 對(duì)象的 ==, 注 == 和 != 是一對(duì)的,重寫了一個(gè),兩個(gè)就都必須重寫
        public static bool operator ==(Car c1, Car c2)
        {
            return c1.length == c2.length && c1.speed == c2.speed;
        }


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


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


        // 重載 對(duì)象的 false
        public static bool operator false(Car c1)
        {
            return c1.length == 0 && c1.speed == 0;
        }


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


    }
}

可重載和不可重載的運(yùn)算****符

可被重載的 不可被重載的
+, -, !, ~, ++, --,*, /, % &&,
==, !=, <, >, <=, >= =, ., ?:, ->, new, is, sizeof, typeof
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • 運(yùn)算符
    +關(guān)注

    關(guān)注

    0

    文章

    172

    瀏覽量

    11079
  • 重載
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2761
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C++虛函數(shù)在多態(tài)中的運(yùn)用

      直觀的說(shuō),就是向不同的對(duì)象發(fā)送一個(gè)消息,不同的對(duì)象在接收消息以后有不同的行為;函數(shù)重載運(yùn)算符重載都是多態(tài)現(xiàn)象。
    發(fā)表于 10-25 17:32 ?526次閱讀
    C++虛函數(shù)在多態(tài)中的運(yùn)用

    C++重載運(yùn)算符重載函數(shù)詳解

    在計(jì)算機(jī)程序設(shè)計(jì)中,運(yùn)算符重載(英語(yǔ):operator overloading)是多態(tài)的一種。這里,運(yùn)算符(比如+,=或==)被當(dāng)作多態(tài)函數(shù),它們的行為隨著其參數(shù)類型的不同而不同。運(yùn)算符
    發(fā)表于 09-20 17:14 ?1951次閱讀

    [7.1.1]--6.1運(yùn)算符重載概述

    編程語(yǔ)言C++
    jf_75936199
    發(fā)布于 :2023年01月10日 10:41:29

    [7.3.1]--6.3成員運(yùn)算符重載函數(shù)

    編程語(yǔ)言C++
    jf_75936199
    發(fā)布于 :2023年01月10日 10:43:09

    [2.2.1]--運(yùn)算符重載的規(guī)則

    C語(yǔ)言
    jf_75936199
    發(fā)布于 :2023年02月24日 15:47:51

    [13.1.4]--友元和運(yùn)算符重載

    程序設(shè)計(jì)面向?qū)ο缶幊?/span>
    jf_75936199
    發(fā)布于 :2023年03月06日 23:04:21

    [13.3.2]--插入運(yùn)算符和提取運(yùn)算符重載

    程序設(shè)計(jì)面向?qū)ο缶幊?/span>
    jf_75936199
    發(fā)布于 :2023年03月06日 23:09:11

    [8.5.1]--運(yùn)算符重載_clip001

    python
    jf_75936199
    發(fā)布于 :2023年03月13日 14:19:38

    [8.5.1]--運(yùn)算符重載_clip002

    python
    jf_75936199
    發(fā)布于 :2023年03月13日 14:20:19

    函數(shù)運(yùn)算符重載(2)#程序設(shè)計(jì)

    程序設(shè)計(jì)
    未來(lái)加油dz
    發(fā)布于 :2023年07月10日 16:27:56

    運(yùn)算符重載(1)#程序設(shè)計(jì)

    程序設(shè)計(jì)
    未來(lái)加油dz
    發(fā)布于 :2023年07月10日 16:46:35

    賦值運(yùn)算符重載(2)#程序設(shè)計(jì)

    程序設(shè)計(jì)
    未來(lái)加油dz
    發(fā)布于 :2023年07月10日 16:58:29

    田洪川VS2005視頻教程:重載方法以及運(yùn)算符重載

    本系列VS2005現(xiàn)在共分為9個(gè)小節(jié),分別為VS2005軟件前期準(zhǔn)備工作,包括軟件安裝、VS工作環(huán)境配置、創(chuàng)建項(xiàng)目程序及基本功能、工具使用;第二部分,將講解VS課程編程語(yǔ)言C#基本的語(yǔ)法、對(duì)象創(chuàng)建及使用、事件驅(qū)動(dòng)編程與回送、類關(guān)系及類事件、VS2005控件介紹及相關(guān)使用方法、數(shù)據(jù)庫(kù)連接與讀取方法、XML格式概述及數(shù)據(jù)存取、文件管理系統(tǒng)應(yīng)用等等...
    發(fā)表于 09-26 19:10 ?576次閱讀

    C++程序設(shè)計(jì)教程之運(yùn)算符重載的詳細(xì)資料說(shuō)明

    本文檔詳細(xì)介紹的是C++程序設(shè)計(jì)教程之運(yùn)算符重載的詳細(xì)資料說(shuō)明主要內(nèi)容包括了:1. 什么是運(yùn)算符重載,2. 運(yùn)算符
    發(fā)表于 03-14 16:04 ?4次下載
    C++程序設(shè)計(jì)教程之<b class='flag-5'>運(yùn)算符</b><b class='flag-5'>重載</b>的詳細(xì)資料說(shuō)明

    干貨:三大實(shí)例講解三種C++運(yùn)算符重載

    本章節(jié)主要講解是運(yùn)算符重載。運(yùn)算符重載是賦予運(yùn)算符能操作自定義類型的功能。C++運(yùn)算符
    的頭像 發(fā)表于 09-30 16:59 ?3440次閱讀
    干貨:三大實(shí)例講解三種C++<b class='flag-5'>運(yùn)算符</b><b class='flag-5'>重載</b>
    RM新时代网站-首页