操作符(运算符)重载 或者叫 二元运算符 operator + 与 转换式操作符 implicit operator explicit operator
static void Main(string[] args)
{
rational r1 = new rational(5);
rational r2 = new rational(51);
rational r3 = r1 + r2; // rational rational 回来 rational
Console.WriteLine(r3.Value);
Console.WriteLine(r1 - r2); // rational rational 回来 int
B bb = new B(52);
rational rr = new rational(1);
B bsbs = bb / rr; // B rational 回来 B
Console.WriteLine(bsbs);
}
public class B
{
public B(int Nu)
{
Num = Nu;
}
public int Num { get; set; }
}
public sealed class rational
{
private int _value = 0;
public int Value
{
get { return _value; }
set { _value = value; }
}
public rational(int value)
{
this._value = value;
}
public rational()
{
}
public static rational operator +(rational numl, rational numm2)
{
return new rational(numl.Value + numm2.Value);
}
public static int operator -(rational numl, rational numm2)
{//1 public 2 static 3 方法 至少一个参数为 类的 类型rational
return (numl.Value - numm2.Value);
}
public static B operator /(B b, rational r)
{
B b2 = new B(b.Num + r.Value);
return b2;
}
}

static void Main(string[] args)
{
rational ri = );
opop p = (opop)ri; //过去 显式
Console.WriteLine(p.Name);
p.Name = ";
rational r2 = p; //回来 隐式
Console.WriteLine(r2.Value);
//int n = 10;
//rational r1 = n;
//double d = (double)r1;
}
public sealed class rational
{
;
public int Value
{
get { return _value; }
set { _value = value; }
}
public rational(int value)
{
this._value = value;
}
public rational(double value)
{
this._value = (int)value;
}
public rational()
{
}
public int ToInt()
{
return _value;
}
public double ToDouble()
{
return (double)_value;
}
public static rational operator +(rational num1, rational num2)
{
rational result = new rational(num1.Value + num2.Value);
return result;
}
public static implicit operator rational(int value)
{
return new rational(value);
}
public static implicit operator rational(double value)
{
return new rational(value);
}
public static explicit operator int(rational value)
{
return value.ToInt();
}
public static explicit operator double(rational value)
{
return value.ToDouble();
}
//
public static explicit operator opop(rational r1)
{ //过去 显式
opop o = new opop(r1.Value + "");
return o;
}
public static implicit operator rational(opop op1)
{ //回来 隐式 1 public 2 static 3 可理解为 方法名 是返回类型 参数为待转换的类型
rational r1 = new rational(int.Parse(op1.Name));
return r1;
}
}
public class opop
{
public opop(string str)
{
Name = str;
}
public string Name { get; set; }
}

操作符(运算符)重载 或者叫 二元运算符 operator + 与 转换式操作符 implicit operator explicit operator的更多相关文章
- C++ 运算符重载一(二元运算符重载)
//二元运算符重载 #include<iostream> using namespace std; class Point { public: Point(int x,int y){ th ...
- C++:成员运算符重载函数和友元运算符重载函数的比较
5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...
- C++:运算符重载函数之成员运算符重载函数
5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...
- 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载
在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...
- 完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载
在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
- C++:运算符重载函数之友元运算符重载
5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
- C++ Primer注意事项11_运算符重载_算术/关系运算符_下标运算符
1.算术/关系运算符 平时,定义成非成员函数以同意左右側运算对象进行转换.由于这些运算符一般不须要改变运算对象的状态,所以形參都是常量的引用. 以"+"号运算符为例: Person ...
随机推荐
- Guava源码学习(五)EventBus
基于版本:Guava 22.0 Wiki:EventBus 0. EventBus简介 提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,E ...
- 51nod 算法马拉松 34 Problem D 区间求和2 (FFT加速卷积)
题目链接 51nod 算法马拉松 34 Problem D 在这个题中$2$这个质数比较特殊,所以我们先特判$2$的情况,然后仅考虑大于等于$3$的奇数即可. 首先考虑任意一个点对$(i, j)$ ...
- 腾讯消消乐 (状态压缩DP)
腾讯消消乐 题意 给出长度为 n 的序列,每次可以选择删除序列的一个连续区间,要求这一段区间内所有数最大公约数不小于 k ,删除后剩下的序列仍然构成连续序列. 定义 f(i) 为进行 i 次操作将整个 ...
- Tarjan缩点【p4819】[中山市选]杀人游戏
Description 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在\(N\)个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀 ...
- luogu P1494 岳麓山上打水
题目描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信息组有一个容量为q升的大缸,由于 ...
- [BZOJ2142]礼物(扩展Lucas)
2142: 礼物 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2286 Solved: 1009[Submit][Status][Discuss] ...
- 透视投影(Perspective Projection)变换推导
透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为.在算法中它是通过透 ...
- Orchard FAQ
Orchard学习视频已登录百度传课: http://www.chuanke.com/3027295-124882.html 问:Orchard用VS重新生成后为什么那么大? 答:因为每个模块的bin ...
- Python学习笔记——模块
使用模块 python中包的组织方式是模块,一个使用其它模块的例子如下: # Filename: using_sys.py import sys print 'The command line arg ...
- 打包工具 使用帮助 inno setup
http://wenku.baidu.com/link?url=0VRJ8n9am1KgVAAqwz-AU1htXamo7Vh0d4QIdGG6_LcTrZBdb7lRim8Jx6M8KaLJDQm1 ...