运算符重载关键字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++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...
随机推荐
- ### 20165219 2017-2018-2《Java程序设计》结对编程一 第二周总结
20165219 2017-2018-2<Java程序设计>结对编程一 第二周总结 结对对象 20165219王彦博 20165232何彦达 需求分析 实现一个程序,要求: 1 支持整数运 ...
- shell和matlab之间的参数传递
shell和matlab之间的参数传递比shell和Python之间的参数传递要简单,在matlab程序中(以.m脚本文件为例,其他程序如函数等未测试)不需要进行任何配置,直接使用即可,见下面 ...
- CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...
- kill 进程的一些小细节
终止前台进程,可以用Ctrl+C组合键.但对于后台进程需要用kill命令. kill PID 还可以加信号(参数),默认情况下是编号为15的信号.term信号将终止所有不能捕捉该信号的进程. -s 可 ...
- C语言实现数组及链表的快速排序
1. 数组快排: 方法一: #include <stdio.h> #include <stdlib.h> //交换 void swap(int *pi, int *pj) { ...
- Sql server 千万级大数据SQL查询优化的几点建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 制作一句话图片马(NO)
- codeforces 1100F Ivan and Burgers 线性基 离线
题目传送门 题意: 给出 n 个数,q次区间查询,每次查询,让你选择任意个下标为 [ l , r ] 区间内的任意数,使这些数异或起来最大,输出最大值. 思路:离线加线性基. 线性基学习博客1 线性基 ...
- POJ - 2528 奇怪的测试数据
听说POJ内部测试数据有问题 我这份代码是WA的(UPD:第二份是AC代码),不过目前把discuss的数据试了一下没毛病 自己试了几组好像也没毛病? 感觉线段树部分的简单hash处理方法还是值得学习 ...
- node.js知识点提取
javascript是脚本语言,脚本语言都需要一个解析器才能运行.