运算符重载关键字operator
operator关键字用来重载内置运算符,使用方法如下:
public class OperatorController : Controller
{
//
// GET: /Operator/
public int num, den;
public OperatorController(int num, int den)
{
this.num = num;
this.den = den;
} // overload operator +
public static OperatorController operator +(OperatorController a, OperatorController b)
{
return new OperatorController(a.num * b.den + b.num * a.den, a.den * b.den);
} // overload operator *
public static OperatorController operator *(OperatorController a, OperatorController b)
{
return new OperatorController(a.num * b.num, a.den * b.den);
}
}
上面的OperatorController类提供了一个构造函数和"+","*"的重载方法。
下面是一组执行代码:
var a = new OperatorController(, );
var b = new OperatorController(, );
var c = new OperatorController(, );
var d = a + b;
var e = a * b + c;
为了便于理解,我将执行过程中的变量一一输出:
a
Response.Write("a:" + a.num + "--" + a.den + "<br/>");
输出:a:1--2
b
Response.Write("b:" + b.num + "--" + b.den + "<br/>");
输出:b:3--7
c
Response.Write("c:" + c.num + "--" + c.den + "<br/>");
输出:b:2--3
d
Response.Write("d:" + d.num + "--" + d.den + "<br/>");
输出:d:13--14
e
Response.Write("e:" + e.num + "--" + e.den + "<br/>");
输出:e:37--42
接下来,重点说一下重载"+"是如何实现的:
以var d = a + b;为例, 分解一下执行过程,
step1. 执行"+"重载方法
public static OperatorController operator +(OperatorController a, OperatorController b)
{
return new OperatorController(a.num * b.den + b.num * a.den, a.den * b.den);
}
当a和b做"+"运算时,会把a和b作为参数传入到这个重载方法(重载运算符只支持两个参数),通过运算可以演变成
public static OperatorController operator +(OperatorController a, OperatorController b)
{
return new OperatorController(13, 14);
}
step2. 执行构造函数
public OperatorController(int num, int den)
{
this.num = num;
this.den = den;
}
所以执行Response.Write("d:" + d.num + "--" + d.den + "<br/>");时,会输出d:13--14
在下面重载"=="的方法里,没有自己的业务逻辑,跟Equals(x,y)效果一样
public static bool operator ==(BaseEntity x, BaseEntity y)
{
return Equals(x, y);
}
运算符重载关键字operator的更多相关文章
- 类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete
一.类型转换运算符 必须是成员函数,不能是友元函数 没有参数 不能指定返回类型 函数原型:operator 类型名(); C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)
原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...
- C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)
下面来进行这段代码的分析: struct node { //定义一个结构体node(节点) int x; int y; int len; //node中有3个成员变量x,y,l ...
- C++学习26 运算符重载的概念和语法
所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...
- C++:运算符重载函数之成员运算符重载函数
5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- C++学习之路—运算符重载(一)概念、方法及规则
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1 什么是运算符重载 先来说下什么是重载吧 ...
- C++运算符重载的方法
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算.也就是说,运算符重载是通过定义函数实现的. 运算符重载实质上是函数的重载 重载运算符的函 ...
- C++抽象编程·运算符重载与友元函数
运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...
随机推荐
- spring 学习(二):spring bean 管理--配置文件和注解混合使用
spring 学习(二)spring bean 管理--配置文件和注解混合使用 相似的,创建 maven 工程,配置pom.xml 文件,具体可以参考上一篇博文: sprint 学习(一) 然后我们在 ...
- 题解 BZOJ 1002 【[FJOI2007]轮状病毒】
题目链接 emm…… 正解:矩阵树定理,但是本宝宝不会求基尔霍夫矩阵. 开始考场方法: 手动模拟$n=1--5$时的答案(数不大,~~画画就出来了~~要画上半个小时). 画出来,答案是这样的:$1$ ...
- 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)
题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...
- Thinkphp5.0 路由
路由定义: 有两种方式: (1).动态注册: eg: Route::rule('hello','index/index/hello','GET'); (2)配置式: eg: return [ 'pat ...
- Python3之pickle模块
用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...
- CF914E Palindromes in a Tree(点分治)
link 题目大意:给定一个n个点的树,每个点都有一个字符(a-t,20个字符) 我们称一个路径是神犇的,当这个路径上所有点的字母的某个排列是回文 求出对于每个点,求出经过他的神犇路径的数量 题解: ...
- Tensorflow博文列表
tensorflow:https://wenku.baidu.com/view/489ecc9727fff705cc1755270722192e44365853.html 语义分割SegNet:htt ...
- CF702F T-Shirts FHQ Treap
题意翻译 题目大意: 有n种T恤,每种有价格ci和品质qi.有m个人要买T恤,第i个人有vi元,每人每次都会买一件能买得起的qi最大的T恤.一个人只能买一种T恤一件,所有人之间都是独立的.问最后每个人 ...
- CentOS 中查看软件的版本号
CentOS 中查看软件的版本号 1. rpm 查看 [root@hadoop110 ~]# rpm -qa | grep mysql mysql-community-client--.el6.x8 ...
- Apache 配置 虚拟主机
<VirtualHost *:80> ServerName tongcheng.5q88.cn:80 ServerAlias DirectoryIndex index.html index ...