ylbtech-LanguageSamples-OperatorOverLoading(运算符重载)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-OperatorOverLoading(运算符重载) |
1.A,示例(Sample) 返回顶部 |
“运算符重载”示例
本示例演示了用户定义的类如何能够重载运算符。有关更多信息,请参见C# 运算符 。
安全说明 |
---|
提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。 |
在 Visual Studio 中生成并运行“运算符重载”示例
在“解决方案资源管理器”中,右击“Complex”项目并单击“设为启动项目”。
在“调试”菜单上,单击“开始执行(不调试)”。
对 Dbbool 重复前面这些步骤。
从命令行生成并运行“运算符重载”示例
使用“更改目录”命令转到“Complex”目录。
键入以下命令:
csc complex.cs
complex使用“更改目录”命令转到“Dbbool”目录。
键入以下命令:
csc dbbool.cs
dbbool
1.B,示例代码(Sample Code)返回顶部 |
1.B.1, complex.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
//版权所有(C) Microsoft Corporation。保留所有权利。 // complex.cs
using System; public struct Complex
{
public int real;
public int imaginary; public Complex(int real, int imaginary)
{
this.real = real;
this.imaginary = imaginary;
} // 声明要重载的运算符 (+)、
// 可相加的类型(两个 Complex 对象)以及
// return type (Complex):
public static Complex operator +(Complex c1, Complex c2)
{
return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
// 重写 ToString 方法,从而以适当的格式显示复数:
public override string ToString()
{
return(String.Format("{0} + {1}i", real, imaginary));
} public static void Main()
{
Complex num1 = new Complex(,);
Complex num2 = new Complex(,); // 通过重载的加号运算符
// 将两个 Complex 对象(num1 和 num2)相加:
Complex sum = num1 + num2; // 使用重写的 ToString 方法打印数字以及相加得到的和:
Console.WriteLine("First complex number: {0}",num1);
Console.WriteLine("Second complex number: {0}",num2);
Console.WriteLine("The sum of the two numbers: {0}",sum); }
}
1.B.2,
1.B.EXE,
First complex number: + 3i
Second complex number: + 4i
The sum of the two numbers: + 7i
请按任意键继续. . .
1.B
1.B,示例代码2(Sample Code)返回顶部 |
1.B.1, dbbool.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。
// 此代码的发布遵从
// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
//
//版权所有(C) Microsoft Corporation。保留所有权利。 // dbbool.cs
using System; public struct DBBool
{
// 三个可能的 DBBool 值:
public static readonly DBBool dbNull = new DBBool();
public static readonly DBBool dbFalse = new DBBool(-);
public static readonly DBBool dbTrue = new DBBool();
// 为 dbFalse、dbNull、dbTrue 存储 -1、0、1 的私有字段:
int value; // 私有构造函数。值参数必须为 -1、0 或 1:
DBBool(int value)
{
this.value = value;
} // 从 bool 到 DBBool 的隐式转换。将 true 映射为
// DBBool.dbTrue,将 false 映射为 DBBool.dbFalse:
public static implicit operator DBBool(bool x)
{
return x? dbTrue: dbFalse;
} // 从 DBBool 到 bool 的显式转换。如果
// 给定的 DBBool 为 dbNull,则引发异常;否则返回
// true 或 false:
public static explicit operator bool(DBBool x)
{
if (x.value == ) throw new InvalidOperationException();
return x.value > ;
} // 相等运算符。如果任何一个操作数为 dbNull,则返回 dbNull;
// 否则返回 dbTrue 或 dbFalse:
public static DBBool operator ==(DBBool x, DBBool y)
{
if (x.value == || y.value == ) return dbNull;
return x.value == y.value? dbTrue: dbFalse;
} // 不等运算符。如果任何一个操作数为
// dbNull,则返回 dbNull;否则返回 dbTrue 或 dbFalse:
public static DBBool operator !=(DBBool x, DBBool y)
{
if (x.value == || y.value == ) return dbNull;
return x.value != y.value? dbTrue: dbFalse;
} // 逻辑非运算符。如果操作数为
// dbFalse,则返回 dbTrue;如果操作数为 dbNull,则返回 dbNull;如果
// 操作数为 dbTrue,则返回 dbFalse:
public static DBBool operator !(DBBool x)
{
return new DBBool(-x.value);
} // 逻辑“与”运算符。如果任何一个操作数为
// dbFalse,则返回 dbFalse;如果任何一个操作数为 dbNull,则返回 dbNull;否则,返回 dbTrue:
public static DBBool operator &(DBBool x, DBBool y)
{
return new DBBool(x.value < y.value? x.value: y.value);
} // 逻辑“或”运算符。如果任何一个操作数为
// dbTrue,则返回 dbTrue;如果任何一个操作数为 dbNull,则返回 dbNull;否则,返回 dbFalse:
public static DBBool operator |(DBBool x, DBBool y)
{
return new DBBool(x.value > y.value? x.value: y.value);
} // 绝对真运算符。如果操作数为
// dbTrue,则返回 true,否则返回 false:
public static bool operator true(DBBool x)
{
return x.value > ;
} // 绝对假运算符。如果操作数为
// dbFalse,则返回 true,否则返回 false:
public static bool operator false(DBBool x)
{
return x.value < ;
} // 重载从 DBBool 到 string 的转换:
public static implicit operator string(DBBool x)
{
return x.value > ? "dbTrue"
: x.value < ? "dbFalse"
: "dbNull";
} // 重写 Object.Equals(object o) 方法:
public override bool Equals(object o)
{
try
{
return (bool) (this == (DBBool) o);
}
catch
{
return false;
}
} // 重写 Object.GetHashCode() 方法:
public override int GetHashCode()
{
return value;
} // 重写 ToString 方法以便将 DBBool 转换为 string:
public override string ToString()
{
switch (value)
{
case -:
return "DBBool.False";
case :
return "DBBool.Null";
case :
return "DBBool.True";
default:
throw new InvalidOperationException();
}
}
} class Test
{
static void Main()
{
DBBool a, b;
a = DBBool.dbTrue;
b = DBBool.dbNull; Console.WriteLine( "!{0} = {1}", a, !a);
Console.WriteLine( "!{0} = {1}", b, !b);
Console.WriteLine( "{0} & {1} = {2}", a, b, a & b);
Console.WriteLine( "{0} | {1} = {2}", a, b, a | b);
// 调用真运算符以确定 DBBool 变量的
// 布尔值:
if (b)
Console.WriteLine("b is definitely true");
else
Console.WriteLine("b is not definitely true");
}
}
1.B.2,
1.B.EXE,
!DBBool.True = DBBool.False
!DBBool.Null = DBBool.Null
DBBool.True & DBBool.Null = DBBool.Null
DBBool.True | DBBool.Null = DBBool.True
b is not definitely true
请按任意键继续. . .
1.B,
1.C,下载地址(Free Download)返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
ylbtech-LanguageSamples-OperatorOverLoading(运算符重载)的更多相关文章
- C++运算符重载
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...
- C++运算符重载学习总结
在C ++中,我们可以使运算符适用于用户定义的类. 这意味着C ++能够为运算符提供数据类型的特殊含义,这种能力称为运算符重载. 例如,我们可以在像String这样的类中重载运算符'+',这样我们就可 ...
- C++ 运算符重载时,将运算符两边对象交换问题.
在C++进行运算符重载时, 一般来讲,运算符两边的对象的顺序是不能交换的. 比如下面的例子: #include <iostream> using namespace std; class ...
- C#高级编程笔记2016年10月12日 运算符重载
1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...
- 标准C++之运算符重载和虚表指针
1 -> *运算符重载 //autoptr.cpp #include<iostream> #include<string> using namespace std ...
- python运算符重载
python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...
- PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天
PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数 1 构造 2 析构 3 赋值 4 拷贝构造 5 oper ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- 我的c++学习(8)运算符重载和友元
运算符的重载,实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该运算符时就调用此函数来行使运算符功能.这个函数叫做运算符重载函数(常为类的成员函数). 方法与解释 ◆ 1.定义运 ...
随机推荐
- POJ 3308
http://poj.org/problem?id=3308 考虑答案不是乘积而是和的做法, 因为对于每一个伞兵我们要么在这行内安装大炮消灭它 要么在这列中安装大炮消灭它,所以容易看出这是一个最小边覆 ...
- linux命令(49):wget命令
Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...
- linux命令(38):traceroute命令
1.命令格式: traceroute[参数][主机] 2.命令功能: traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置. 具体参数格式:tracer ...
- 自定制Form组件
代码 import re import copy class ValidateError(Exception): def __init__(self,detail): self.detail = de ...
- nginx静态资源浏览器缓存
1.缓存介绍 作用:提升用户体验,减少服务器压力 浏览器无缓存:浏览器发起请求->无缓存->请求WEB服务器->web服务器检查是否有更新(没有更新返回304)->呈现 浏览器 ...
- Java浮点类型的格式化
概述 基于Java,介绍将浮点类型小数进行格式化的方案. 正文 在Java中,用于格式化小数的类是java.text.DecimalFormat,比如你可以这样使用: double data = 33 ...
- 洛谷——P1165 日志分析
P1165 日志分析 题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况的日志.该日志记录了两类操作:第一类操作为集装箱入库操作,以及该次 ...
- 安装Windows渗透环境工具--PentestBox
PentestBox不同于运行在虚拟机或者双启动环境的Linux渗透测试发行版. 它打包了所有的安全工具,并且可以在Windows系统中原生地运行,有效地降低了对虚拟机或者双启动环境的需求. 下载地址 ...
- UGUI的优点新UI系统四 开源
UGUI的优点新UI系统四 开源 新UI系统是开源的,所以开发者可以看到新UI系统实现的源码,并加以修改和使用. 开源授权协议——MIT/X11 Unity所搭载的新UI系统,是在开源授权协议MIT/ ...
- hdu1006 Tick and Tick (数学题 借鉴了大神的博客)
先缩短一半的时间:早上的12个小时和下午的12小时对时钟是一样的,因为时钟12小时与0小时的三针位置相同.接着就是了解到每次所有的针从有重合到再次有重合至多有一段连续的段符合三针分离度大于n.所以只要 ...