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的更多相关文章

  1. 类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete

    一.类型转换运算符 必须是成员函数,不能是友元函数 没有参数 不能指定返回类型 函数原型:operator 类型名();  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  2. Java 原始数据类型的计算:运算符重载(Operator Overload)和类型转换(Type Conversion)

    原文阅读:<算法(第四版)>第一章 第一节:基础编程模型 有没有在面试的时候被问到:下面这几行代码的执行结果是什么?依据是什么? System.out.println (5/3); Sys ...

  3. C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)

    下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,l ...

  4. C++学习26 运算符重载的概念和语法

    所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...

  5. C++:运算符重载函数之成员运算符重载函数

    5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...

  6. C++:运算符重载函数之友元运算符重载

    5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...

  7. C++学习之路—运算符重载(一)概念、方法及规则

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1    什么是运算符重载 先来说下什么是重载吧 ...

  8. C++运算符重载的方法

    运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算.也就是说,运算符重载是通过定义函数实现的. 运算符重载实质上是函数的重载 重载运算符的函 ...

  9. C++抽象编程·运算符重载与友元函数

    运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...

随机推荐

  1. ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结

    20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...

  2. shell和matlab之间的参数传递

        shell和matlab之间的参数传递比shell和Python之间的参数传递要简单,在matlab程序中(以.m脚本文件为例,其他程序如函数等未测试)不需要进行任何配置,直接使用即可,见下面 ...

  3. CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】

    本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...

  4. kill 进程的一些小细节

    终止前台进程,可以用Ctrl+C组合键.但对于后台进程需要用kill命令. kill PID 还可以加信号(参数),默认情况下是编号为15的信号.term信号将终止所有不能捕捉该信号的进程. -s 可 ...

  5. C语言实现数组及链表的快速排序

    1. 数组快排: 方法一: #include <stdio.h> #include <stdlib.h> //交换 void swap(int *pi, int *pj) { ...

  6. Sql server 千万级大数据SQL查询优化的几点建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. 制作一句话图片马(NO)

  8. codeforces 1100F Ivan and Burgers 线性基 离线

    题目传送门 题意: 给出 n 个数,q次区间查询,每次查询,让你选择任意个下标为 [ l , r ] 区间内的任意数,使这些数异或起来最大,输出最大值. 思路:离线加线性基. 线性基学习博客1 线性基 ...

  9. POJ - 2528 奇怪的测试数据

    听说POJ内部测试数据有问题 我这份代码是WA的(UPD:第二份是AC代码),不过目前把discuss的数据试了一下没毛病 自己试了几组好像也没毛病? 感觉线段树部分的简单hash处理方法还是值得学习 ...

  10. node.js知识点提取

    javascript是脚本语言,脚本语言都需要一个解析器才能运行.