通过一个实际的例子来介绍。其中重载==,!=,Equal,GetHashCode函数。
public class Record
{
public string[] arr = null;
public bool hasEqual = false;
//重载一个下标运算符号
public string this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
public override int GetHashCode()
{
//在这里使用字符串数组的hashcode,避免自己完成一个算法
return arr.GetHashCode();
}
public Record(int count)
{
if (count < 1)
{
throw new Exception("数组的长度不能小于1");
}
arr = new string[count];
}
public static bool operator ==(Record rec1, Record rec2)
{
//注意我们调用Equals来判断是否相等。而不是在自己的函数中判、断。这是因为如果在自己的函数中判断。比如有rec2=null的情况。如果是这种情况。我们要判断if(rec2==null){…}。其中rec2==null也是调用一个等号运算符,这里面有一个递归的过程,造成了死循环。
return Object.Equals(rec1, rec2);
}
public static bool operator !=(Record rec1, Record rec2)
{
return !Object.Equals(rec1, rec2);
}
public override bool Equals(object obj)
{
//判断与之比较的类型是否为null。这样不会造成递归的情况
if (obj == null)
return false;
if (GetType() != obj.GetType())
return false;
Record rec = (Record)obj;
int count = rec.arr.Length;
for (int i = 0; i < count; i++)
{
if (this.arr[i] != rec.arr[i])
{
return false;
}
}
return true;
}
}
分享到:
相关推荐
在C++编程语言中,运算符重载是一项重要的特性,它允许我们为自定义类型赋予新的操作含义。这里,我们将深入探讨如何为一个名为`str`的类重载`+=`和`==`运算符,这个类是模仿C++内置的`std::string`类型而设计的。 ...
在本主题中,我们将深入探讨如何通过运算符重载来增强字符串类的功能,特别是`=`、`[]`、`==`、`!=`、`和`>>`这些运算符。 1. **运算符`=`:** 这是赋值运算符,用于将一个字符串的值赋给另一个字符串。在`std::...
=`是三个非常基础且重要的运算符,它们在程序逻辑中起到关键的作用。让我们深入探讨一下这三个运算符的含义和用法。 1. `=`:赋值运算符 赋值运算符`=`用于将右侧表达式的结果赋值给左侧的变量。它执行的是一个...
定义表示形状的抽象类及相应的派生类,并实现相关操作符重载。 (1)定义表示形状的抽象...最后将所有形状对象按面积从大到小排序(要求使用重载的运算符“>”来判断对象的面积的大小关系),并输出排序后的对象信息。
在编程世界中,等号(=)和三个等号(===)是两种常见的比较运算符,它们在不同的上下文和语言中有着不同的含义和用法。这篇文章将详细探讨这两个符号在编程中的区别。 首先,我们要了解的是单个等号(=)。在...
在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的内存区域,由程序员自己申请...
### equal与==的区别 在Java编程语言中,`equal`方法和`==`操作符都是用来比较对象之间是否相等的工具,但它们之间存在重要的差异。本文将从三个方面进行详细的对比分析:字符串的比较、非字符串对象的比较以及基本...
=”、“>=”、“>”、“<=”、“<” 等比较运算符,可用于两个字符串间的各种比较运算。 **示例:** ```cpp CString str1 = "Hello"; CString str2 = "hello"; bool equal = (str1 == str2); // equal 的值为 false...
=i4",因为 i3 和 i4 引用的是不同的对象。 为什么在 -128 到 127 之间的 Integer 对象是同一个引用? 在 Java 中,Integer 对象在 -128 到 127 之间的值是缓存的,这意味着在这个范围内的所有 Integer 对象都是同...
具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、...
具体用法与测试用例Main.cpp里有3个测试用例,分别是针对构造函数属性计算与运算符重载的 内已包含测试工程xp\vc6.0\上亲测通过,并经过BoundsChecker测试没有内存泄漏。有兴趣的童鞋可以下作参考。 注意: 1、...
在C#编程语言中,`==`运算符和`Equals()`方法是用来比较对象或值类型是否相等的两种常见方式,但它们之间存在着显著的区别。本文将深入探讨这两种比较方式的工作原理及其应用场景。 首先,`==`运算符是C#中的一个...
="分别表示等于、大于、小于、大于等于、小于等于和不等于。这些运算符在比较两个值后,会返回true或false,而不是具体的数值。例如: ```php $a = 10; $b = 5; if ($a > $b) { echo "a is greater than b"; } ``` ...
2. 比较运算符:`==`、`!=`、`>`、`、`>=`、`<=`用于比较两个值的大小或相等性。 3. 逻辑运算符:`&&`(逻辑与)、`||`(逻辑或)、`!`(逻辑非)用于组合布尔表达式。 4. 位运算符:如`&`、`|`、`^`、`~`、`、`>>`...
在C语言中,赋值运算符用“=”表示,但需要注意的是,“=”并不表示数学上的等号,而是用来执行赋值操作。例如: ```c int count = 5; int total1 = total2 = 0; ``` 这里的`count = 5`表示将数字5赋值给变量`...
=,<,>,<=,>=),逻辑运算符(&&,||,!),赋值运算符(=,+=,-=,*=,/=,%=),位运算符(&,|,^,~,,>>,>>>)等。运算符的优先级和结合性也是编程中需要注意的重要点,合理的使用可以提高代码的效率和...
boolean isNotEqual = a != b; // true boolean isGreater = a > b; // true boolean isLess = a ; // false boolean isGreaterOrEqual = a >= b; // true boolean isLessOrEqual = a <= b; // false ``` 逻辑...
在Ruby语言中,提供了四种比较操作符:`equal?`, `eql?`, `==`, 和 `===`。这些操作符在不同场景下的使用可能会产生不同的结果,特别是在处理不同类的对象时尤其需要注意。本文主要聚焦于`==`操作符的使用及其潜在的...
boolean isNotEqual = (a != b); System.out.println("是否不相等:" + isNotEqual); ``` 输出结果为: ``` 是否不相等:true ``` ##### 大于运算符(>) 大于运算符 `>` 用于检查一个数值是否大于另一个数值。例如...
=、<、>、<=、>=)、逻辑运算符(&&、||、!)、位运算符以及赋值运算符。例如,比较两个整数是否相等: ```java int a = 5; int b = 5; if (a == b) { System.out.println("a and b are equal."); } ``` "第4章 ...