運算符重載
基本概念
- 我們可以重定義或重載 C# 中內(nèi)置的運算符
 - 可以使用用戶自定義類型的運算符
 - 重載運算符是具有 特殊名稱的函數(shù) ,是通過關(guān)鍵字 ** operator **后跟運算符的符號來定義的
 - 與其他函數(shù)一樣,重載運算符有****返回類型和參數(shù)列表
 - 使用 operator 關(guān)鍵字來聲明運算符。 運算符聲明必須符合以下規(guī)則
- 同時包含 public 和 static 修飾符
 - 一元運算符有一個輸入?yún)?shù),二元運算符有兩個輸入?yún)?shù)
 
 - **語法示例: 正面的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);
        }
    }
}
**如果不使用重載也想要達(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;
            // 將兩個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);
        }
    }
}
可以看到效果,如果不重載運算符,則需要在外面調(diào)用時 自己去計算,以上只有一處調(diào)用,是否重載無所謂,但是如果 調(diào)用的地方多了,每個調(diào)用的地方都得寫此邏輯就太麻煩了,所以用好運算符重載還是很好用的
重載多個運算符實現(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 運算符
            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 | 
                        聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
                        舉報投訴
                    
                    - 
                                函數(shù)
                                +關(guān)注
關(guān)注
3文章
4403瀏覽量
66599 - 
                                運算符
                                +關(guān)注
關(guān)注
0文章
173瀏覽量
11881 - 
                                重載
                                +關(guān)注
關(guān)注
0文章
8瀏覽量
2899 
發(fā)布評論請先 登錄
相關(guān)推薦
                    熱點推薦
                  C++虛函數(shù)在多態(tài)中的運用
  直觀的說,就是向不同的對象發(fā)送一個消息,不同的對象在接收消息以后有不同的行為;函數(shù)重載和運算符重載都是多態(tài)現(xiàn)象。
    
                發(fā)表于 10-25 17:32        
        ?814次閱讀            
    
                    
    
C++重載運算符和重載函數(shù)詳解
在計算機程序設(shè)計中,運算符重載(英語:operator overloading)是多態(tài)的一種。這里,運算符(比如+,=或==)被當(dāng)作多態(tài)函數(shù),它們的行為隨著其參數(shù)類型的不同而不同。運算符
    
                發(fā)表于 09-20 17:14        
        ?2728次閱讀            
    
    
    
    
    
    
    
    
    
    
    田洪川VS2005視頻教程:重載方法以及運算符重載
本系列VS2005現(xiàn)在共分為9個小節(jié),分別為VS2005軟件前期準(zhǔn)備工作,包括軟件安裝、VS工作環(huán)境配置、創(chuàng)建項目程序及基本功能、工具使用;第二部分,將講解VS課程編程語言C#基本的語法、對象創(chuàng)建及使用、事件驅(qū)動編程與回送、類關(guān)系及類事件、VS2005控件介紹及相關(guān)使用方法、數(shù)據(jù)庫連接與讀取方法、XML格式概述及數(shù)據(jù)存取、文件管理系統(tǒng)應(yīng)用等等...
    
                發(fā)表于 09-26 19:10        
        ?703次閱讀            
    
C++程序設(shè)計教程之運算符重載的詳細(xì)資料說明
本文檔詳細(xì)介紹的是C++程序設(shè)計教程之運算符重載的詳細(xì)資料說明主要內(nèi)容包括了:1. 什么是運算符重載,2. 運算符
    
                發(fā)表于 03-14 16:04        
                ?4次下載    
    
                    
    
          
        
        
什么是運算符重載
                
 
    
           
            
            
                
            
評論