运算符重载关键字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(1, 2);
var b = new OperatorController(3, 7);
var c = new OperatorController(2, 3);
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

时间: 2024-08-29 02:09:15

运算符重载关键字operator的相关文章

C++ 运算符重载(operator overloading)

运算符重载是通过函数实现的,它本质上是函数重载. 运算符重载其实就是定义一个函数,在函数内实现想要的功能,当用到这个运算符时,编译器会自动调用这个函数. 可以将operator运算符名称这一部分看作函数名,例如operator+. 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12355294.html

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

5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式如下: 函数类型 operator 运算符(形参表) {       函数体 } (2)成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义. 在类的内部,声明成员运算符重载函数原型的格式如下: class X{      ...      函数类型 operator运算符(参数表); };

C++ 关于运算符重载

转载来源:http://c.biancheng.net/cpp/biancheng/view/216.html 重载运算符的函数一般格式如下:    函数类型 operator 运算符名称 (形参表列)    {        // 对运算符的重载处理    } 例如,想将”+”用于Complex类(复数)的加法运算,函数的原型可以是这样的:    Complex operator+ (Complex& c1, Complex& c2);在上面的一般格式中,operator是关键字,是专门

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

所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能. 实际上,我们已经在不知不觉中使用了运算符重载.例如,"+"号可以对不同类型(int.float 等)的数据进行加法操作:"<<"既是位移运算符,又可以配合 cout 向控制台输出数据.C++已经对这些运算符进行了重载. C

C++运算符重载的妙用

运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,operator>>支持cin,cout输入输出.重载operator[],实现下标运算.重载operator+=实现元素追加:重载operator()实现函数调用.假设你对C++的运算符重载掌握的游刃有余.那就无需继续往下看了. 运算符重载带来的优点就是--让代码变得简洁.以下将展示几个标准库因使

第九周项目2-Time类中的运算符重载(续)

在Time类中的运算符重载基础上 (1)定义对时间对象的自增和自减一目运算符 (2)定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年05月14日 * 版本号:v1.0 */ #include <iostream> using n

第八周项目 二 【项目2-Time类中的运算符重载】

[项目2-Time类中的运算符重载] 实现Time类中的运算符重载. [cpp] view plaincopyprint? class CTime { private: unsigned short int hour;    // 时 unsigned short int minute;  // 分 unsigned short int second;  // 秒 public: CTime(int h=0,int m=0,int s=0); void setTime(int h,int m,i

第九周项目二-Time类中的运算符重载(续)

<span style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;">在Time类中的运算符重载基础上</span><br style="color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height:

第十一章 运算符重载

第十一章 运算符重载 1.  运算符重载 2.  在成员函数中实现自加 3.  重载前置自加运算符 返回类型 [email protected](参数表){} @代表要重载的运算符 对象运算符重载不同于变量运算符重载 void operator++(){++n;} ++i;//等价于i.operator++();若i是变量 则++i就是调用operator++() //n=++i;错误原因:右值为一个无符号的返回型 //1+2;等价于operator+(1+2),此时 4.  创建临时对象 见程