黑马程序员-------运算符重载(二)
来源:互联网 发布:gta5pc优化 编辑:程序博客网 时间:2024/06/04 18:52
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1、逻辑运算符|,&,!也可以重载,从而应用与自定义的类的运算,就像其默认的功能,从而返回一个bool 类型的值,我们也可以定义它返回其他类型的值,但是,它们的返回值最好还是定义个bool类型的值,以防造成混乱。
2、重载关系运算符,并且在结束后返回一个bool类型的值。
需要注意的是,有的运算符是需要成对重载的,例如>与<,>=与<=,==与!=等等,不然在编译的时候,会报错。
假设下面的例子是:两个公司,通过重载运算符,得出是否应该合并,当人数小于一定数量的时候,判断bool 值得出的是真还是假,从而判断该公司是否应该合并。
这样的好处就是,我们不必知道每个班级的人数,从而判断出是否应该合并。
3、对于运算符的重载,当我们使用的时候,要注意两点:
(1)维持运算符的原始意义,就是按照运算符的功能,重载后的功能是一样的,不然会对系统的构架有不良的影响,从而影响系统整个性能。
(2)有些运算符是不能够重载的例如:=,&&,||等。
下面是重载逻辑运算符:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _04
{
class Program
{
static void Main(string[] args)
{
int stu;
stu = 10;
bool flag;
bool huo;
bool fei;
Company c = new Company();
Company csum = new Company();
Company csub = new Company();
Company zero = new Company();
zero = zero - 30;
Console.WriteLine(c.stu);
csum = csum + stu;
Console.WriteLine(csum.stu);
csub = csub - stu;
Console.WriteLine(csub.stu);
flag = csum & csub;
if (flag == true)
{
Console.WriteLine("两公司可以合并");
}
if (flag == false)
{
Console.WriteLine("两公司不可以合并");
}
huo = zero | c;
if (huo == true)
{
Console.WriteLine("两公司可以合并");
}
if (huo == false)
{
Console.WriteLine("两公司不可以合并");
}
fei = !zero;
if(fei==true )
{
Console .WriteLine ("公司没有人,必须撤销!");
}
else
{
Console .WriteLine ("公司还有人,不能撤销");
}
Console.ReadKey();
}
}
class Company
{
public int stu;
public Company()
{
stu = 30;
}
public static Company operator +(Company c, int sum)
{
int stu;
stu = c.stu + sum;
Company myc = new Company();
myc.stu = stu;
return myc;
}
public static Company operator -(Company c, int sub)
{
int stu;
stu = c.stu - sub;
Company myc = new Company();
myc.stu = stu;
return myc;
}
public static bool operator &(Company c1, Company c2)
{
bool flag;
if (c1.stu + c2.stu >= 50)
{
flag = false;
}
else
{
flag = true;
}
return flag;
}
public static bool operator |(Company c1, Company c2)
{
bool flag;
if (c1.stu == 0 || c2.stu ==0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
public static bool operator !(Company c)
{
bool flag;
if (c.stu == 0)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
}
}
下面的例子是重载关系运算符,这是就需要上面提到的内容,需要成对出现,不能只重载一种运算符。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _01
{
class Program
{
static void Main(string[] args)
{
int com;
bool flag;
Company c = new Company();
Company csum = new Company();
Company csub = new Company();
com = 20;
Console.WriteLine(c.total);
csum = csum + com;
Console.WriteLine(csum.total);
csub = csub - com;
Console.WriteLine(csub.total);
flag = csum > csub;
if (flag == true)
{
Console.WriteLine("csum公司人数大于csub公司人数");
}
else
{
Console.WriteLine("csum公司人数小于csub公司人数");
}
flag = csub<csum;
if (flag == true)
{
Console.WriteLine("csub公司人数小于csum公司人数");
}
else
{
Console.WriteLine("csub公司人数大于csum公司人数");
}
Company c1 = new Company();
Company c2 = new Company();
flag=c1.Equals(c1);
com = c1.GetHashCode();
Console.WriteLine(com);
Console.WriteLine(flag);
Console.ReadKey();
}
}
class Company
{
public int total;
public Company()
{
total = 30;
}
public static Company operator +(Company c, int num)
{
Company myc = new Company();
myc = c;
myc.total = c.total + num;
return myc;
}
public static Company operator -(Company c, int sub)
{
Company myc = new Company();
myc = c;
myc.total = c.total - sub;
return myc;
}
public static bool operator >(Company c1, Company c2)
{
bool flag;
if (c1.total > c2.total )
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
public static bool operator <(Company c1, Company c2)
{
bool flag;
if (c1.total < c2.total)
{
flag = true;
}
else
{
flag = false;
}
return flag;
}
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
- 黑马程序员-------运算符重载(二)
- 黑马程序员-------运算符重载(三)
- 黑马程序员----运算符重载
- 黑马程序员_Java没有运算符重载?
- 黑马程序员_C#运算符重载
- 黑马程序员-------运算符重载(一)
- 黑马程序员_重载运算符
- 黑马程序员_Java没有运算符重载
- 运算符重载(二)
- 运算符重载(二)
- 黑马程序员 Java基础<二> 运算符
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- partial_sort 二 重载cmp()运算符
- 运算符重载练习(二)
- C++中的运算符重载(二)
- 多态性之运算符重载(二)
- JSP 后台导出Excel
- mini2440裸机编程---网卡
- cookie,Application ,session的介绍和典型用处
- NDK C++ 编译错误
- 谈最初的Tomcat内存问题!
- 黑马程序员-------运算符重载(二)
- Spring源码分析之——导入spring-framework源代码到Eclipse
- [转]Content-Type: application/x-www-form-urlencoded
- 微软发布SQL Server 2014预览版,展示内存数据库技术
- Runtime exec: 读InputStream & ErrorStream 没反应
- Java 界面小摘记
- 青春未散场
- 使用Ubuntu13.04更新软件时出现了以下的错误:W: 校验签名出错。此仓库未被更新...
- POJ 2007 Scrambled Polygon 凸包点排序逆时针输出