C#学习之向量运算符重载

//未重载运算符+=,但编译通过;C#不允许重载运算符‘=’,但如果重载‘+’运算符,编译器会自动使用‘+’运算符的重载来执行‘+=’运算符的操作;
//‘-=’、‘*=’、‘&=’和‘/=’等所有赋值运算都遵循此规则;

1、若重载了‘==’运算符,也必须重载‘!=’;否则会产生编译器错误

运算符重载示例(注意:左右运算符):

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using static System.Console;
 7 
 8 namespace LearnForCSharp
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             int i = 10;
15             WriteLine($"{i}");
16             int j = (int)(i + 0.8);
17             WriteLine($"{j}");
18             string iName = nameof(i);
19             Write(iName + ";iName:" + nameof(iName) + "\n");
20             WriteLine();
21 
22             Vector vector1, vector2, vector3;
23 
24             vector1 = new Vector(3, -1, 3);
25             vector2 = new Vector(4, 4, 4);
26             vector3 = vector1 + vector2 * 3;
27             Vector v4 = new Vector(vector3);
28 
29             v4 += vector2;
30             //未重载运算符+=,但编译通过;C#不允许重载运算符‘=’,但如果重载‘+’运算符,编译器会自动使用‘+’运算符的重载来执行‘+=’运算符的操作;
31             //‘-=’、‘*=’、‘&=’和‘/=’等所有赋值运算都遵循此规则;
32 
33             double multip = vector1 * vector3;
34             WriteLine($"{vector3.ToString()}");
35             WriteLine($"{multip}");
36             WriteLine($"{v4.ToString()}");
37             ReadKey();
38         }
39     }
40 
41     struct Vector
42     {
43         public double x, y, z;
44 
45         public Vector(double x, double y, double z)
46         {
47             this.x = x;
48             this.y = y;
49             this.z = z;
50         }
51 
52         public Vector(Vector rhs)
53         {
54             x = rhs.x;
55             y = rhs.y;
56             z = rhs.z;
57         }
58 
59         public override string ToString()
60         {
61             return "(" + x.ToString() + "," + y.ToString() + "," + z.ToString() + ")";
62         }
63 
64         public static Vector operator +(Vector lhs, Vector rhs)
65         {
66             Vector result = new Vector(lhs);
67 
68             result.x += rhs.x;
69             result.y += rhs.y;
70             result.z += rhs.z;
71 
72             return result;
73         }
74 
75         public static Vector operator *(double a, Vector rhs)
76         {
77             Vector result = new Vector(rhs);
78             result.x *= a;
79             result.y *= a;
80             result.z *= a;
81 
82             return result;
83         }
84 
85         public static Vector operator *( Vector rhs, double a)
86         {
87             return a * rhs;
88         }
89 
90         public static double operator *(Vector lhs, Vector rhs)
91         {
92             double result = 0;
93 
94             result = lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;
95 
96             return result;
97         }
98     }
99 }

 比较运算符重载"=="和“!=”

 1         //若比较俩个对象引用就是比较存储对象的内存地址,一般很少这样比较;比较对象的值,并返回布尔结果
 2         public static bool operator ==(Vector lhs, Vector rhs)
 3         {
 4             if (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z)
 5                 return true;
 6             else
 7                 return false;
 8         }
 9 
10         public static bool operator !=(Vector lhs, Vector rhs)
11         {
12             return !(lhs == rhs);
13         }

 

转载于:https://www.cnblogs.com/RedCoffeeGod/p/5678730.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安装php5.5,源码安装php5.5

centos6.6首先上传php-5.5.10至服务器安装依赖环境yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-d…

PHP 表单文件上传的原理,php多文件上传功能实现原理及代码

今天对多图片上传功能小小的研究了一下,把下面的代码整理出来,方便以后自己使用以及供大家交流1、upload.html页面,即先是input typefile的文件:图片上传第一张图片第二张图片第三张图片第四张图片第五张图片2、do_upload.php页面…

php的c方法,thinkphp的c方法的使用

这篇文章主要介绍了关于thinkphp的c方法的使用,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下用过thinkphp的朋友都知道,C()方法在整个框架中用的非常普遍,C方法的实现非常简单,但是功能非常…

Fiddler中session的请求/响应类型与图标对照表

转载于:https://www.cnblogs.com/chengchengla1990/p/5681978.html

php打印矩阵,PHP实现顺时针打印矩阵(螺旋矩阵)的方法示例

这篇文章主要介绍了PHP实现顺时针打印矩阵(螺旋矩阵)的方法,涉及PHP基于数组遍历、运算模拟打印实现螺旋矩阵功能的相关操作技巧,对PHP感兴趣的朋友可以参考下本篇文章。本文实例讲述了PHP实现顺时针打印矩阵的方法。分享给大家供大家参考,具体如下:问题…

NOIP2014 uoj20解方程 数论(同余)

又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0a1xa2x^2..anx^n0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数&#x…

php transfer-encoding: chunked,php – 使用chunked transfer encoding和gzip

我最近开始在我的网站上使用gzip,它在除Opera之外的所有浏览器上都起到了一种魅力作用,它给出了一个错误,即由于数据损坏而无法解压缩内容.从我可以从测试和谷歌搜索中收集到的,使用gzip和chunked传输编码可能是一个问题.请求像css文件这样的小文件时没有错误这一事实也指向了这…

@override

目录 用处 作用 注意 用处: 继承抽象类,必须实现抽象方法,方法上要加override 实现接口时,必须实现接口里定义的方法,方法上要加override 作用: 可以检查方法签名的拼写错误 改变父类中的一些行为 Override…

java实现语音发送,Java实现发送手机短信语音验证功能代码实例

这篇文章主要介绍了java实现发送手机短信语音验证功能代码实例,www.cppcns.com文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用…

c++父类和子类转化致命的代码错误

最近在工作中,出现了严重的代码错误,对象的基类和子类的继承,代码大致如下: class A { };class B : public A { }void main() {A* a;(用于子类对象来进行赋值) new 子类;//错误代码如下B* b (B*) a;b.方法; }//在这个…

JAVA获得天气json数据的方法,获取从天气预报接口返回回来的json数据

WampServer集成环境安装与配置实习到了第三个礼拜了,原来我们小组是以开发php为主的,我们项目的服务器也是用php做的,因此我觉得很有必要学一下php的相关知识,首先当然是搭建环境了,写篇博客分享下经验. 目录: 一.软件下载 二 ...C++与Lua交互(三)通过上一篇…

大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了

大专毕业能做什么工作,大专毕业后都去干嘛了,我梳理了基本信息,看来一下!大专毕业能做什么工作专科生毕业之后从业的职位基础包含了社会发展的各个方面。一般能够从业自身技术专业有关的工作中,如果有做生意的技能&…

SpringMVC启动过程详解(li)

通过对SpringMVC启动过程的深入研究,期望掌握Java Web容器启动过程;掌握SpringMVC启动过程;了解SpringMVC的配置文件如何配置,为什么要这样配置;掌握SpringMVC是如何工作的;掌握Spring源码的设计和增强阅读…

fusioncharts json java,FusionCharts使用教程:利用XML/JSON属性加载外部LOGO

在使用FusionCharts图表时,你可以在运行时加载外部Logo并显示于图表中。Logo可以是GIF/JPEG/PNG或SWF文件。你可以使用chart元素的logoURL属性来加载一个Logo。XMLJSON{"chart":{ "yaxisname":"Sales Figure", "caption":&…

java redis 多节点,Redis单机多节点集群部署,超简单

1、在虚拟机中部署具有三个主节点,三个从节点的集群(注,必须要有从节点),虚拟机的IP地址为192.168.133.129,三个主节点的部口号分别为7001(从:7004)、7002(从:7005)、7003(从:7006)。2、安装Red…

matlab检测串口数据帧头,MATLAB 串口读取姿态数据及GUI实时动态显示设计

上一篇实现了Matlab 对串口数据的读取,数据可以读取并且保存到本地。本文主要设计GUI并且动态的显示曲线。可以更直观的观察实时的姿态数据和传感器数据。GUI设计效果:姿态GUi.png分别设置三个区域,分别为数据接收显示区域,串口设…

[转]面向对象的六大原则

现在编程的主流语言基本上都是面向对象的。如C#,C,JAVA。我们在使用时,已经构造了一个个的类。但是往往由于我们在类内部或外部的设计上存在种种问题,导致尽管是面向对象的语言,却是面向过程的逻辑,甚至维护…

matlab中response函数,matlab函数的种类

突然发现matlab的函数还是很有讲究的,以前只是用,很少注意这个问题,现在看到了稍微总结一下吧。在matlab帮助中搜索Types of Functions,可以看到matlab常用的函数种类:Anonymous Functions --匿名函数Primary Function…

面向对象的十大原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经…

php返回支付状态,magento paypal返回支付状态

paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者来 说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续 费&am…