1. static void Main(string[] args)
  2. {
  3. rational r1 = new rational(5);
  4. rational r2 = new rational(51);
  5. rational r3 = r1 + r2; // rational rational 回来 rational
  6. Console.WriteLine(r3.Value);
  7. Console.WriteLine(r1 - r2); // rational rational 回来 int
  8.  
  9. B bb = new B(52);
  10. rational rr = new rational(1);
  11. B bsbs = bb / rr; // B rational 回来 B
  12. Console.WriteLine(bsbs);
  13. }
  1. public class B
  2. {
  3. public B(int Nu)
  4. {
  5. Num = Nu;
  6. }
  7. public int Num { get; set; }
  8. }
  9. public sealed class rational
  10. {
  11. private int _value = 0;
  12. public int Value
  13. {
  14. get { return _value; }
  15. set { _value = value; }
  16. }
  17. public rational(int value)
  18. {
  19. this._value = value;
  20. }
  21. public rational()
  22. {
  23.  
  24. }
  25. public static rational operator +(rational numl, rational numm2)
  26. {
  27. return new rational(numl.Value + numm2.Value);
  28. }
  29. public static int operator -(rational numl, rational numm2)
  30. {//1 public 2 static 3 方法 至少一个参数为 类的 类型rational
  31. return (numl.Value - numm2.Value);
  32.  
  33. }
  34. public static B operator /(B b, rational r)
  35. {
  36. B b2 = new B(b.Num + r.Value);
  37. return b2;
  38. }
  39. }

  

  1. static void Main(string[] args)
  2. {
  3. rational ri = );
  4. opop p = (opop)ri; //过去 显式
  5. Console.WriteLine(p.Name);
  6. p.Name = ";
  7.  
  8. rational r2 = p; //回来 隐式
  9. Console.WriteLine(r2.Value);
  10. //int n = 10;
  11. //rational r1 = n;
  12. //double d = (double)r1;
  13. }
  1. public sealed class rational
  2. {
  3. ;
  4. public int Value
  5. {
  6. get { return _value; }
  7. set { _value = value; }
  8. }
  9. public rational(int value)
  10. {
  11. this._value = value;
  12. }
  13. public rational(double value)
  14. {
  15. this._value = (int)value;
  16. }
  17. public rational()
  18. {
  19.  
  20. }
  21. public int ToInt()
  22. {
  23. return _value;
  24. }
  25. public double ToDouble()
  26. {
  27. return (double)_value;
  28. }
  29. public static rational operator +(rational num1, rational num2)
  30. {
  31. rational result = new rational(num1.Value + num2.Value);
  32. return result;
  33. }
  34. public static implicit operator rational(int value)
  35. {
  36. return new rational(value);
  37. }
  38. public static implicit operator rational(double value)
  39. {
  40. return new rational(value);
  41. }
  42. public static explicit operator int(rational value)
  43. {
  44. return value.ToInt();
  45. }
  46. public static explicit operator double(rational value)
  47. {
  48. return value.ToDouble();
  49. }
  50.  
  51. //
  52. public static explicit operator opop(rational r1)
  53. { //过去 显式
  54. opop o = new opop(r1.Value + "");
  55. return o;
  56. }
  57.  
  58. public static implicit operator rational(opop op1)
  59. { //回来 隐式 1 public 2 static 3 可理解为 方法名 是返回类型 参数为待转换的类型
  60. rational r1 = new rational(int.Parse(op1.Name));
  61. return r1;
  62. }
  63.  
  64. }
  65.  
  66. public class opop
  67. {
  68. public opop(string str)
  69. {
  70. Name = str;
  71. }
  72. public string Name { get; set; }
  73.  
  74. }

  

操作符(运算符)重载 或者叫 二元运算符 operator + 与 转换式操作符 implicit operator explicit operator的更多相关文章

  1. C++ 运算符重载一(二元运算符重载)

    //二元运算符重载 #include<iostream> using namespace std; class Point { public: Point(int x,int y){ th ...

  2. C++:成员运算符重载函数和友元运算符重载函数的比较

    5.2.4 成员运算符重载函数和友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中有两个参数:对于单目运算符而言,成员运算符重载函数 ...

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

    5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...

  4. 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载

    在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...

  5. 完善String类([]、 +、 += 运算符重载)、>>和<<运算符重载

    在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...

  6. C++ 运算符重载时,将运算符两边对象交换问题.

    在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...

  7. C++:运算符重载函数之友元运算符重载

    5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...

  8. C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...

  9. C++ Primer注意事项11_运算符重载_算术/关系运算符_下标运算符

    1.算术/关系运算符 平时,定义成非成员函数以同意左右側运算对象进行转换.由于这些运算符一般不须要改变运算对象的状态,所以形參都是常量的引用. 以"+"号运算符为例: Person ...

随机推荐

  1. Mysql 连接池

    数据库连接池的作用: 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接 ...

  2. linux题目整理(二)

    1.如何过滤出已知当前目录下oldboy中的所有一级目录(不包含子目录,即只能是一级目录) 方法1:find ./ -type d -maxdepth 1方法2:ls -F方法3:ls -l  | g ...

  3. python每日一类(3):os和sys

    os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functio ...

  4. Android 之 AlarmManager(定时器) 的介绍和使用

    AlarmManager 包含的主要方法: // 取消已经注册的与参数匹配的定时器 void cancel(PendingIntent operation) //注册一个新的延迟定时器void set ...

  5. 牛客网 暑期ACM多校训练营(第二场)D.money-贪心 or 动态规划

    D.money 贪心,直接贴官方的题解吧. 题目大意 你要按照顺序依次经过n个商店,每到达一个商店你可以购买一件商品,也可以出售你手中的商品. 同一时刻你手上最多拿一件商品.在第i个商店购买和出售的代 ...

  6. NOIP2018提高组模拟题(二)

    咒语(curse) Description 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路. 正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条. 亮亮拿起纸条的一端, ...

  7. SQL常用语句|创建表,设置主键......

    新建表 create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' nu ...

  8. [置顶] kubernetes资源对象--ConfigMap

    原理 很多生产环境中的应用程序配置较为复杂,可能需要多个config文件.命令行参数和环境变量的组合.使用容器部署时,把配置应该从应用程序镜像中解耦出来,以保证镜像的可移植性.尽管Secret允许类似 ...

  9. Qt中的非模式窗口配置;

    Test7_5A::Test7_5A(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); m_searchwin = new Searc ...

  10. 一个人的安全部之ELK接收Paloalto日志并用钉钉告警

    起因 通报漏洞后,开发未能及时修复漏洞,导致被攻击,领导说我发现被攻击的时间晚了,由于一个人安全部精力有限未能及时看IPS告警,于是做了个钉钉告警. 本人环境介绍 ubuntu 14.04 pytho ...