C#运算符重载---逐步地分析与理解
1.什么是运算符重载
定义:(百科定义)就是把已经定义的、有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能。操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过程。
2.为什么需要运算符重载?
在C#中 ,内置的数据类型有:int、double等这些类型是预先在系统内定义好的,可以直接进行数值加减运算。例如:int i, j = 1; int sum=i+j;可以直接得到想要的和sum。
如果要比较一个类(结构)进行对象比较加、减等操作 该如何实现?例如一个类Box,有对象Box1和Box2,那么, 如何实现对象相加Box3 = Box1 + Box2?
这时,我们就要用到具有用户定义类型的运算符。重载运算符是具有特殊名称的功能,关键字operator后跟定义运算符的符号。 类似于任何其他函数定义,重载运算符具有返回类型和参数列表。
3.下面用三个案例,以逐步步进的方式解析一下

1 namespace operator_overload
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Box Box1 = new Box();
8 Box Box2 = new Box();
9 Box Box3 = new Box();
10
11 double volume1,volume2 = 0.0;
12
13 Box1.setLength(60.0);
14 Box1.setBreadth(70.0);
15 Box1.setHeight(50.0);
16
17 Box2.setLength(121.0);
18 Box2.setBreadth(133.0);
19 Box2.setHeight(110.0);
20
21 volume1 = Box1.getVolume();
22 Console.WriteLine("Volume of Box1 :{0}",volume1);
23
24 volume2 = Box2.getVolume();
25 Console.WriteLine("Volume of Box1 :{0}", volume2);
26
27
28 }
29 }
30
31 class Box
32 {
33 private double length;
34 private double breadth;
35 private double height;
36
37 public double getVolume()
38 {
39 return length * breadth * height;
40 }
41 public void setLength(double len)
42 {
43 length = len;
44 }
45 public void setBreadth(double bre)
46 {
47 breadth = bre;
48 }
49 public void setHeight(double hei)
50 {
51 height = hei;
52 }
53
54 }
案例一

案例一没有运用运算符重载,也没类或结构相加,可以正常示和;

1 namespace operator_overload
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Box Box1 = new Box();
8 Box Box2 = new Box();
9 Box Box3 = new Box();
10
11 double volume1,volume2 = 0.0;
12
13 Box1.setLength(60.0);
14 Box1.setBreadth(70.0);
15 Box1.setHeight(50.0);
16
17 Box2.setLength(121.0);
18 Box2.setBreadth(133.0);
19 Box2.setHeight(110.0);
20
21 volume1 = Box1.getVolume();
22 Console.WriteLine("Volume of Box1 :{0}",volume1);
23
24 volume2 = Box2.getVolume();
25 Console.WriteLine("Volume of Box1 :{0}", volume2);
26
27 Box3 = Box1 + Box2; //类实例进行相加;
28 }
29 }
30
31 class Box
32 {
33 private double length;
34 private double breadth;
35 private double height;
36
37 public double getVolume()
38 {
39 return length * breadth * height;
40 }
41 public void setLength(double len)
42 {
43 length = len;
44 }
45 public void setBreadth(double bre)
46 {
47 breadth = bre;
48 }
49 public void setHeight(double hei)
50 {
51 height = hei;
52 }
53
54
55 }
56 }
57 }
案例二
案例二,增加了“Box3 = Box1 + Box2;”,但是没有相应的运算符代码进行支持,所以编译器显示如下提示

错误 1 运算符“+”无法应用于“operator_overload.Box”和“operator_overload.Box”类型的操作数

1 namespace operator_overload
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 Box Box1 = new Box();
8 Box Box2 = new Box();
9 Box Box3 = new Box();
10
11 double volume1,volume2 = 0.0;
12
13 Box1.setLength(60.0);
14 Box1.setBreadth(70.0);
15 Box1.setHeight(50.0);
16
17 Box2.setLength(121.0);
18 Box2.setBreadth(133.0);
19 Box2.setHeight(110.0);
20
21 volume1 = Box1.getVolume();
22 Console.WriteLine("Volume of Box1 :{0}",volume1);
23
24 volume2 = Box2.getVolume();
25 Console.WriteLine("Volume of Box1 :{0}", volume2);
26
27 Box3 = Box1 + Box2;
28 }
29 }
30
31 class Box
32 {
33 private double length;
34 private double breadth;
35 private double height;
36
37 public double getVolume()
38 {
39 return length * breadth * height;
40 }
41 public void setLength(double len)
42 {
43 length = len;
44 }
45 public void setBreadth(double bre)
46 {
47 breadth = bre;
48 }
49 public void setHeight(double hei)
50 {
51 height = hei;
52 }
53
54 public static Box operator +(Box b, Box c)
55 {
56 Box box = new Box();
57 box.length = b.length + c.length;
58 box.breadth = b.breadth + c.breadth;
59 box.height = b.height + c.height;
60 return box;
61 }
62 }
63 }
案例三
案例三,增加如下运算符重载的支撑代码
public static Box operator +(Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}

Box类,Box3 = Box1 + Box2;对应的计算运算式如下:
5878880 = (60+121)*(70+133)*(50+110)
C#运算符重载---逐步地分析与理解的更多相关文章
- C++ 自增、自减运算符的重载和性能分析
01 ++.--运算符重载函数的格式 自增运算符和自减运算符是有前置和后置之分的,如: a++ // 后置自增运算符 ++a // 前置自增运算符 b-- // 后置自减运算符 --b // 前置自减 ...
- C++运算符重载的方法
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算.也就是说,运算符重载是通过定义函数实现的. 运算符重载实质上是函数的重载 重载运算符的函 ...
- 探索Scala(1)-- 运算符重载
Scala语言运算符重载全然是语法层面的小把戏,本文记录我对Scala语言运算符重载的一些理解. 方法调用语法糖 调用方法时,Scala同意省略点号和圆括号,如以下代码所看到的: 把运算符映射成单词 ...
- 《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态
C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...
- 【dart学习】之运算符重载
一,什么是运算符重载(operator overloading) 在软件开发过程中,运算符重载(英语:operator overloading)是多态的一种.运算符重载通常只是一种语法糖,这种语法对语 ...
- [信号与系统]傅里叶变换、DFT、FFT分析与理解
目录 一.前言 二.傅里叶变换 1.傅里叶级数 2.傅里叶级数系数求解 2.1.求解方法 2.2.三角函数的正交性 2.3.系数求解过程 2.4.关于傅里叶级数的个人感悟 3.引入复指数 4.总结 三 ...
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
- C++学习笔记之运算符重载
一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...
- C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用
5.2.5 "++"和"--"的重载 对于前缀方式++ob,可以用运算符函数重载为: ob.operator++() //成员函数重载 或 operator++ ...
随机推荐
- 洛谷——P1980 [NOIP2013 普及组] 计数问题
题目描述 试计算在区间 11 到 nn的所有整数中,数字x(0 ≤ x ≤ 9)x(0≤x≤9)共出现了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2, ...
- 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片
大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...
- Java基础(八)——IO流3_对象流
一.对象流 1.序列化与反序列化 序列化:将内存中的Java对象保存到磁盘中或通过网络传输出去. 反序列化:将磁盘文件中的对象还原为内存中的一个Java对象. 用途: (1)将对象保存到物理硬盘:比如 ...
- SpringBoot 之 整合JDBC使用
导入相关依赖: # pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...
- 利用Javaweb应用中六种属性范围,来理解Servlet的并发问题
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513748225550189060/ Web应用中有六种属性范围: (1) 局部变量 (2) 实例变量 (3) 类 ...
- 面试官: Flink双流JOIN了解吗? 简单说说其实现原理
摘要:今天和大家聊聊Flink双流Join问题.这是一个高频面试点,也是工作中常遇到的一种真实场景. 本文分享自华为云社区<万字直通面试:Flink双流JOIN>,作者:大数据兵工厂 . ...
- JDK8 一文搞定👍
! https://zhuanlan.zhihu.com/p/442182870 Java8 新特性 学习来源于 B站 尚硅谷yyds Java学习源码 2021/11/22 距离,过年还有 57 天 ...
- 《剑指offer》面试题15. 二进制中1的个数
问题描述 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输入:00000 ...
- C# 类的继承问题 正方形周长面积计算问题
1. 设计编写一个控制台应用程序,练习类的继承. (1) 编写一个抽象类 People,具有"姓名","年龄"字段,"姓名"属性,Work ...
- 【刷题-LeetCode】148 Sort List
Sort List Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4 ...