运算符重载关键字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++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...
随机推荐
- Python第二周总结
之所以晚发10天是因为中途发生了很多事情,让我比较懵,甚至都想放弃学Python,但自己选择的路,在艰难也得走下去,加油!!! 补充上期str后缀小魔法: 字符串一旦创建不得修改,一旦修改或拼接,就会 ...
- python3好用的mysql.connector库
python3好用的mysql.connector库 from mysql.connector import connect #建立mysql连接,生成一个mysql.connector对象 conn ...
- 用HTML,css完成的百叶窗效果,新手必看
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title> ...
- 常用跨平台IDE如何添加main函数的参数并正确执行
1. Eclipse-cdt如何添加main函数参数: 打开eclipse,新建工程.新建源文件,此处以C语言为例,写入代码如下: #include <stdio.h> //int arg ...
- opencv学习笔记2
import cv2 as cvimport numpy as np"""#图像加法运算 即像素加法 (结果图=图1+图二) (两个图像必须是等大等类型的)image = ...
- HTML中title前面小图标的实现
做一个比较正规的网站,需要在标题栏前面加上相应的小图标,会好看的多.效果大致如下: 其实实现起来很简单,只要在html文件中的<head></head>标签中加上: <l ...
- PowerShell 如何 远程连接【转】
转自: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://bobzy.blog.51cto.com/2109336/1181249 ...
- Android 滚动视图(ScollView)
1.介绍 2.使用技巧 3.xml文件代码 <?xml version="1.0" encoding="utf-8"?> <LinearLay ...
- Python web前端 09 jQuery
Python web前端 09 jQuery 一.三个重要网址 http://jquery.cuishifeng.cn/ #中文查询网站 http://www.bootcdn.cn/ #引入jq ht ...
- C++_友元3-其他友元关系
友元和类的关系还可以更复杂. 举个例子,假设出现了交互式遥控器,交互式遥控器能够让您回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声. 这个例子的问题,可以使用新的友元关系来解决.我把它 ...