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. Python第二周总结

    之所以晚发10天是因为中途发生了很多事情,让我比较懵,甚至都想放弃学Python,但自己选择的路,在艰难也得走下去,加油!!! 补充上期str后缀小魔法: 字符串一旦创建不得修改,一旦修改或拼接,就会 ...

  2. python3好用的mysql.connector库

    python3好用的mysql.connector库 from mysql.connector import connect #建立mysql连接,生成一个mysql.connector对象 conn ...

  3. 用HTML,css完成的百叶窗效果,新手必看

    <!DOCTYPE html><html> <head>  <meta charset="utf-8">  <title> ...

  4. 常用跨平台IDE如何添加main函数的参数并正确执行

    1. Eclipse-cdt如何添加main函数参数: 打开eclipse,新建工程.新建源文件,此处以C语言为例,写入代码如下: #include <stdio.h> //int arg ...

  5. opencv学习笔记2

    import cv2 as cvimport numpy as np"""#图像加法运算 即像素加法 (结果图=图1+图二) (两个图像必须是等大等类型的)image = ...

  6. HTML中title前面小图标的实现

    做一个比较正规的网站,需要在标题栏前面加上相应的小图标,会好看的多.效果大致如下: 其实实现起来很简单,只要在html文件中的<head></head>标签中加上: <l ...

  7. PowerShell 如何 远程连接【转】

    转自: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://bobzy.blog.51cto.com/2109336/1181249 ...

  8. Android 滚动视图(ScollView)

    1.介绍 2.使用技巧 3.xml文件代码 <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  9. Python web前端 09 jQuery

    Python web前端 09 jQuery 一.三个重要网址 http://jquery.cuishifeng.cn/ #中文查询网站 http://www.bootcdn.cn/ #引入jq ht ...

  10. C++_友元3-其他友元关系

    友元和类的关系还可以更复杂. 举个例子,假设出现了交互式遥控器,交互式遥控器能够让您回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声. 这个例子的问题,可以使用新的友元关系来解决.我把它 ...