//未重载运算符+=,但编译通过;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#学习之向量运算符重载相关推荐

  1. 小甲鱼c++学习视频之运算符重载

    一.学习要点: 1.将分数定义为一个类,简化处理过程,面向对象的思维,不仅有数据,还可以对一个分数进行操作,比如约分操作,加减乘除操作. 2.类的私有成员只能通过成员函数进行访问. 3.分数的约分过程 ...

  2. (C++学习笔记七)运算符重载

    九.运算符重载 1.Code : #include<iostream> using namespace std;//运算符重载的意义: //对已有的 运算符 重新进行定义,赋予其另一项功能 ...

  3. c++学习笔记之运算符重载

    1.重载运算符 void operator+(....)        //重载"+"运算符 (1)如果是成员函数形式,那么必须是非static (2)使用运算符必须重载,除了&q ...

  4. C++学习之左移运算符重载

    在C++里,cout 后边加上<< 便可以输出数据,但是输出的只是一些变量,我现在想输出一个对象,所以需要重载一下<<. 例如我创建了一个class person{ }; pe ...

  5. C++学习笔记:(四)运算符重载 类型转换

    目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...

  6. 【C++】C++类的学习(三)——运算符重载与友元函数

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 前面的两篇博文中介绍了类的一些基本特性,今天讲一讲运算符重载和友元. 运算符重载 运算 ...

  7. C++学习笔记(10)运算符重载,友元函数,友元类

    c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...

  8. C++学习笔记(九)——运算符重载

    C++学习笔记(九)--运算符重载 C++内部定义的数据类型(int , float, -)的数据操作可以用运算符号来表示,其使用形式是表达式:用户自定义的类型的数据的操作则用函数表示,其使用形式是函 ...

  9. C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇.STL 篇.高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C++的三大特 ...

最新文章

  1. JavaScript停止冒泡和阻止浏览器默认行为
  2. Java Excel 插入图片
  3. PowerDesigner的一下简单使用技巧
  4. 转帖:从C51的指针到病毒-c51软复位,经典,分析透彻
  5. jQuery EasyUI API 中文文档 - 数字框(NumberBox)
  6. linux命令:groupdel
  7. (转)LCA模板(倍增法)
  8. Taro+react开发(20)--控制icon大小
  9. 社群扫码进群活码引流完整运营源码/对接免签约支付接口/推广正常绑定下级
  10. SWAT 学习相关基础知识(一)---Mr.Zhang
  11. 年月日时分秒格式_日期时间格式中提取日期,居然用INT
  12. SPSS倾向评分匹配(PSM)插件安装与资源分享
  13. JavaScript 基础知识总结(一)
  14. 虚拟机黑裙加载硬盘_适合练手,在虚拟机中安装黑群晖,想要组建NAS服务器的看这里...
  15. yocto linux 内核源码,利用Bitbake、Poky、Yocto、OpenEmbedded编译生成车规AGL Linux
  16. linux ARM64 中断底层处理代码分析
  17. 人工智能ai的有关专业术语_您需要知道的11个人工智能术语
  18. 惠普f5静音键指示灯不亮(转载)
  19. Java中的移位操作——Java编程思想笔记
  20. LaTeX期刊论文写作

热门文章

  1. Java基础————理解Integer对象的缓存策略
  2. ROS + OpenCV
  3. python 视频和图片转换 视频压缩 图片降低分辨率 图像处理
  4. RFID 射频 RFID工作流程 自动识别技术 工作频段 短距离无线通信技术
  5. linux下载命令 scp,linux命令详解之scp命令
  6. vue.js将本地文件上传到ftp服务器,vue项目使用FTP传输部署项目服务器,node命令编写...
  7. linux ipset 流量,linux中ipset命令的使用方法详解
  8. c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏
  9. python给js变量赋值_python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)...
  10. java定义计算机类并模拟其操作