C#编程-显示运算符重载

在这里插入图片描述

在这里插入图片描述

重载函数的概念也可以应用于运算符。在将C#运算符应用到用户定义的数据类型时,运算符重载为它们提供额外的能力。只可以重载预定义的C#运算符组。

在这里插入图片描述

运算符重载的必要性

大多数内置数据类型都有与它们相关的预定义运算符。例如:带有运算符+、-、*和/的C#数据类型int为数学运算提供支持。类是用户定义的数据类型的示例。对用户定义的数据类型进行运算不像对内置数据类型进行运算那么简单。要使用具有用户定义的数据类型的运算符,需要根据程序员的需求重载它们。

通过为运算符定义函数,可以重载运算符。关于这种运算符的函数用operator关键字来声明。

可以把运算符看作为编译器内部的函数。例如,表达式a+b可看作为+(a,b)。程序也可以通过编写带有类似签名的适当函数重载这些函数。为运算符指定额外任务的函数称为运算符函数。
operator关键字和要被重载的运算符用作函数名。

例如,为了重载+运算符,使用下面的语法定义运算符函数:

	<access specifier>className operator + (parameters)
	{
   
		//Code
	}

以下代码显示了运算符重载的用法:

	using System;
	class Distance
	{
   
		int dist;
		public Distance(int d)
		{
   
			this.dist = d;
		}
		public static Distance operator + (Distance d1,Distence d2)
		{
   
			return new Distance(d1.dist + d2.dist);
		}
		public void showDistance()
		{
   
			Console.WriteLine(dist);
		}
	}
	class Program
	{
   
		static void Main(string[] args)
		{
   
			Distance d1 = new Distance(3);
			Distance d2 = new Distance(10);
			Distance d3;
			d3 = d1 + d2;
			d3.showDistance();
		}
	}

在上述代码中,重载了+运算符以加上存储在Distance类的对象中的值。编译器将语句d1+d2解释为operator +(d1,d2),这里用运算符的第二个操作数调用了第一个操作数的运算符函数。

与函数调用相比,用户可能更容易理解运算符表示法,因为它更接近现实生活中的做法。将运算符与用户定义的数据类型关联包括重载它们。

下表描述了C#中可用的各个运算符的重载能力。

运算符 描述
+、-、!、~、++、– 这些一元运算符 需要一个操作数,可以被重载。
+、-、*、/、% 这些二元运算符需要两个操作数,可以被重载。
==、!=、<、>、<=、>= 比较运算符可以被重载
&&、|| 条件逻辑运算符不能被直接重载,但是它们使用可以被重载的&和\求值。
+=、-=、*=、/=、%=、= 赋值运算符不能被重载。

注释
如果重载比较运算符,那么必须成对重载;即,如果重载==,那么必须也重载!=。反之亦然。类似地,<和>,以及<=和>=也是如此。

小问题:
以下哪个代码段给出在类Complex中重载运算符道德正确语法?
a.public static Complex operator - (Cpmplex c1, Complex c2){ //code }
b.public static Complex -(Complex c1, Complex c2){ //code }
c.public static Complex operator ( Complex c1, Complex c2){ //code }
d.public static -operator Complex( Complex c1,Complex c2){ //code }
答案:a.public static Complex operator - (Cpmplex c1, Complex c2){

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript面向对象编程实战

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 面向对象编程(OOP)是JavaScript中非常重要的一个概念。掌握OOP可以帮助我们写出更加清晰、…

synchronized、volatile关键字

Java中的synchronized关键字 synchronized关键字介绍 synchronized块是Java提供的一种原子性内置锁&#xff0c;Java中的每个对象都可以把它当作一个同步锁来使用&#xff0c;这些Java内置的使用者看不到的锁被称为内部锁&#xff0c;也叫作监视器锁。 线程的执行代码在进入…

LLM Agent之RAG的反思:放弃了压缩还是智能么?

已经唠了三章的RAG&#xff0c;是时候回头反思一下&#xff0c;当前的RAG是解决幻觉的终点么&#xff1f;我给不出直接的答案&#xff0c;不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良&#xff0c;这个思路的天花板高度有限~ 反思来源于对RAG下模型回答的直观感受&…

【软考中级-软件设计师】day3:程序设计语言基础知识

概述 练习题 程序设计语言的基本成分 练习题 编译程序基本原理 名词解释 词法分析 词法分析&#xff08;英语&#xff1a;lexical analysis&#xff09;是计算机科学中将字符序列转换为单词&#xff08;Token&#xff09;序列的过程。进行词法分析的程序或者函数叫作…

Duboo-入门到学废【下篇】

目录 &#x1f953;1.dubbo-admin &#x1f32d;2.序列化 &#x1f9c2;3.超时 &#x1f95a;4.重试 ❤️5.多版本 &#x1f9c7;6.负载均衡 &#x1f35f;7.集群容错 1.dubbo-admin &#x1f495;&#x1f495;&#x1f495; 1.1dubbo-admin是什么 1.duboo-admin是一…

【大数据】Flink CDC 的概览和使用

Flink CDC 的概览和使用 1.什么是 CDC2.什么是 Flink CDC3.Flink CDC 前生今世3.1 Flink CDC 1.x3.2 Flink CDC 2.x3.3 Flink CDC 3.x 4.Flink CDC 使用5.Debezium 标准 CDC Event 格式详解 1.什么是 CDC CDC&#xff08;Change Data Capture&#xff0c;数据变更抓取&#xf…

SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题&#xff0c;Redis主从之间可以做同步&#xff0c;为了提高主从同步时的性能&#xff0c;单节点Redis的内存不要设置太高&#xff0c;如果内存占用过多&#xff0c;做RDB的持久化&#xff0c;或者做全量同步的时候&#xff0c;导致大…

Kubernetes复习总结(二):Kubernetes容器网络

2、Kubernetes容器网络 1&#xff09;、Docker网络原理 Docker默认使用的网络模型是bridge&#xff0c;这里只讲bridge网络模型 1&#xff09;容器之间通信原理 当安装完docker之后&#xff0c;docker会在宿主机上创建一个名叫docker0的网桥&#xff0c;默认IP是172.17.0.1…

家具电子图册制作方法

​随着互联网的普及&#xff0c;越来越多的人选择在线购物&#xff0c;家具行业也不例外。为了满足消费者对高品质家具的需求&#xff0c;家具电子图册应运而生。与传统纸质图册相比&#xff0c;家具电子图册具有更高的转化率、更低的成本和更快的更新速度。 一、与纸质版相比有…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构&#xff0c;称为 Filesystem Hierarchy Standard&#xff08;文件系统层次结构标准&#xff09;&#xff0c;其定义了不同目录的用途和内容。 浅蓝色文字 /&#xff08;根目录&#xff09;&#xff1a; /根目录是整个文件系统的起点&…

迁移学习|代码实现

还记得我们之前实现的猫狗分类器吗&#xff1f;在哪里&#xff0c;我们设计了一个网络&#xff0c;这个网络接受一张图片&#xff0c;最后输出这张图片属于猫还是狗。实现分类器的过程比较复杂&#xff0c;准备的数据也比较少。所以我们是否可以使用一种方法&#xff0c;在数据…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)添加 删除 修改 释放

在上篇文章&#xff08;处理任务队列中的任务&#xff09;中我们讲解了处理任务队列中的任务的具体流程&#xff0c;eventLoopProcessTask函数的作用&#xff1a; 处理队列中的任务&#xff0c;需要遍历链表并根据type进行对应处理,也就是处理dispatcher中的任务。 // 处理任…

Linux之Ubuntu环境Jenkins部署前端项目

今天分享Ubuntu环境Jenkins部署前端vue项目 一、插件安装 1、前端项目依赖nodejs&#xff0c;需要安装相关插件 点击插件管理&#xff0c;输入node模糊查询 选择NodeJS安装 安装成功 2、配置nodejs 点击后进入 点击新增 NodeJS 配置脚手架类型&#xff1a;如果不填 默认npm …

华为HarmonyOS 创建第一个鸿蒙应用 运行Hello World

使用DevEco Studio创建第一个项目 Hello World 1.创建项目 创建第一个项目&#xff0c;命名为HelloWorld&#xff0c;点击Finish 选择Empty Ability模板&#xff0c;点击Next Hello World 项目已经成功创建&#xff0c;接来下看看效果 2.预览 Hello World 点击右侧的预…

[VUE]2-vue的基本使用

目录 vue基本使用方式 1、vue 组件 2、文本插值 3、属性绑定 4、事件绑定 5、双向绑定 6、条件渲染 7、axios 8、⭐跨域问题 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅…

RPC基础知识总结

RPC 是什么? RPC&#xff08;Remote Procedure Call&#xff09; 即远程过程调用&#xff0c;通过名字我们就能看出 RPC 关注的是远程调用而非本地调用。 为什么要 RPC &#xff1f; 因为&#xff0c;两个不同的服务器上的服务提供的方法不在一个内存空间&#xff0c;所以&am…

【UML】第17篇 包图

目录 一、什么是包图 二、包图的作用&#xff1a; 三、应用场景&#xff1a; 四、绘图符号的说明&#xff1a; 五、语法&#xff1a; 六、其他要说的 一、什么是包图 包图&#xff08;Package Diagram&#xff09;是一种用于描述系统中包和包之间关系的UML图。包是一种将…

Thonny开发ESP32点灯

简介 ESP32是一款功能强大的低功耗微控制器&#xff0c;由乐鑫&#xff08;Espressif&#xff09;公司开发。它集成了Wi-Fi和蓝牙功能&#xff0c;适用于各种物联网应用。Thonny是一款基于Python的开源集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为MicroPython设计…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢&#xff1f; 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据&#xff0c;数据格式为shp&#xff0c;数据坐标为wgs1984地理坐标。数据中不仅包括地铁&#xff0c;也包括轻…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标&#xff0c;都要使用&#xff0c;这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理&#xff0c;非常重要 由于坦克中心点是要严格对齐到一条网格线&#xff0c;并沿着这条线前进的&#xff0c;如果拐弯不做处理&#…