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
C#学习之向量运算符重载相关推荐
- 小甲鱼c++学习视频之运算符重载
一.学习要点: 1.将分数定义为一个类,简化处理过程,面向对象的思维,不仅有数据,还可以对一个分数进行操作,比如约分操作,加减乘除操作. 2.类的私有成员只能通过成员函数进行访问. 3.分数的约分过程 ...
- (C++学习笔记七)运算符重载
九.运算符重载 1.Code : #include<iostream> using namespace std;//运算符重载的意义: //对已有的 运算符 重新进行定义,赋予其另一项功能 ...
- c++学习笔记之运算符重载
1.重载运算符 void operator+(....) //重载"+"运算符 (1)如果是成员函数形式,那么必须是非static (2)使用运算符必须重载,除了&q ...
- C++学习之左移运算符重载
在C++里,cout 后边加上<< 便可以输出数据,但是输出的只是一些变量,我现在想输出一个对象,所以需要重载一下<<. 例如我创建了一个class person{ }; pe ...
- C++学习笔记:(四)运算符重载 类型转换
目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...
- 【C++】C++类的学习(三)——运算符重载与友元函数
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...
- C++学习笔记(10)运算符重载,友元函数,友元类
c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...
- C++学习笔记(九)——运算符重载
C++学习笔记(九)--运算符重载 C++内部定义的数据类型(int , float, -)的数据操作可以用运算符号来表示,其使用形式是表达式:用户自定义的类型的数据的操作则用函数表示,其使用形式是函 ...
- C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现
本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...
最新文章
- JavaScript停止冒泡和阻止浏览器默认行为
- Java Excel 插入图片
- PowerDesigner的一下简单使用技巧
- 转帖:从C51的指针到病毒-c51软复位,经典,分析透彻
- jQuery EasyUI API 中文文档 - 数字框(NumberBox)
- linux命令:groupdel
- (转)LCA模板(倍增法)
- Taro+react开发(20)--控制icon大小
- 社群扫码进群活码引流完整运营源码/对接免签约支付接口/推广正常绑定下级
- SWAT 学习相关基础知识(一)---Mr.Zhang
- 年月日时分秒格式_日期时间格式中提取日期,居然用INT
- SPSS倾向评分匹配(PSM)插件安装与资源分享
- JavaScript 基础知识总结(一)
- 虚拟机黑裙加载硬盘_适合练手,在虚拟机中安装黑群晖,想要组建NAS服务器的看这里...
- yocto linux 内核源码,利用Bitbake、Poky、Yocto、OpenEmbedded编译生成车规AGL Linux
- linux ARM64 中断底层处理代码分析
- 人工智能ai的有关专业术语_您需要知道的11个人工智能术语
- 惠普f5静音键指示灯不亮(转载)
- Java中的移位操作——Java编程思想笔记
- LaTeX期刊论文写作
热门文章
- Java基础————理解Integer对象的缓存策略
- ROS + OpenCV
- python 视频和图片转换 视频压缩 图片降低分辨率 图像处理
- RFID 射频 RFID工作流程 自动识别技术 工作频段 短距离无线通信技术
- linux下载命令 scp,linux命令详解之scp命令
- vue.js将本地文件上传到ftp服务器,vue项目使用FTP传输部署项目服务器,node命令编写...
- linux ipset 流量,linux中ipset命令的使用方法详解
- c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
- python给js变量赋值_python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...
- java定义计算机类并模拟其操作