问题标签 [operator-overloading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
305 浏览

c# - 隐式运算符?

我需要帮助。我正在创建一个这样的 SelectItem 类:

我希望以下代码有效

而不必这样做:

我怎样才能做到这一点?

0 投票
3 回答
392 浏览

c++ - c++重载`-`

我已经为我的类图将运算符重载为“-”。它的使用并不完全直观(糟糕的编码 - 我知道)但如果我这样做 graph3 = graph2-graph1 那么图 3 应该只接收图 2 和图 1 中的那些顶点。

所以,我已经编写了代码,当我运行调试器时,操作函数似乎创建了一个新的“图”来返回,并将适当的顶点添加到新图,然后调试器似乎退出了操作函数,但永远不会让它回到主。就好像它在等我输入什么一样。不会出现错误消息。

这是代码:

操作员功能:

我正在使用代码块。

复制构造函数:

赋值运算符:

0 投票
2 回答
15299 浏览

c# - Linq 和相等运算符:“System.Int32”类型的表达式不能用于“System.Object”类型的参数

我试图覆盖 C# 中的相等 (==) 运算符来处理任何类型与自定义类型的比较(自定义类型实际上是围绕 null 的包装器/框)。

所以我有这个:

现在,如果我拨打如下电话:

它工作得很好。但是,如果我尝试通过 Linq 表达式树做同样的事情:

它抛出异常:

关于为什么基本系统可以将 Int32 转换为 Object,但 Linq 不能,或者我该如何解决这个问题的任何想法?

整件事都盯着看,因为 Linq 一开始也无法将 Int32 与 Object 进行比较:

引发异常,指出“System.Int32”和“System.Object”没有比较运算符。


快速跟进:

以下确实可以正常工作:

因此,专门将所有内容都转换为对象。那么,Linq 是否只是在内部不处理继承?真烦人……


跟进#2:

我还尝试使用自定义比较方法:

这也会引发异常:

但是再次将所有内容直接转换为对象有效:

所以我想我有我的解决方法......将所有内容都转换为对象并使用自定义比较方法。我仍然对 Linq 没有像普通 C# 那样自动进行转换感到惊讶。

0 投票
5 回答
3148 浏览

.net - .NET:值类型的“==” op_Equality() 的默认实现在哪里?

我在 .NET Reflector 中四处寻找,并注意到对于像“String”这样的引用类型,“==”运算符有一个显式重载:

返回:“==”运算符的 System.Reflection.MethodInfo。

由于其实施,您不能执行以下操作:

然而,同样的事情也适用于值类型:

我试图弄清楚 .NET 内部如何处理类型转换过程,所以我一直在寻找 .NET Reflector 中 op_Equality() 的实现,但“int”没有。

返回空值。

那么,值类型的“==”运算符的默认实现在哪里?我希望能够通过反射调用它:


编辑#1:

我试过这个,但没有奏效:


编辑#2:

也试过这个,但没有爱:

由于这种类型检查(从 .NET Reflector 中提取),我相信 ValueType 上的这个 .Equals 运算符不起作用:

0 投票
4 回答
77190 浏览

c++ - “运算符 = 必须是非静态成员”是什么意思?

我正在创建一个双链表,并重载了 operator= 以使列表等于另一个:

但是当我尝试编译时出现此错误:

此外,如果有帮助,第 74 行是定义的最后一行,带有“}”。

0 投票
2 回答
9484 浏览

c++ - 如何重载间接运算符?(C++)

我正在尝试创建一个迭代器类作为列表类的成员类,并尝试重载间接运算符 (*) 以访问它指向的列表:

其中lstptr是指向列表current的指针, 是指向节点类的指针,并且节点类包含datatype的数据成员T

迭代器声明如下:

我能够很好地编译重载 operator* 的函数定义,但是当我尝试执行以下操作时:

我得到的错误说 <1> 我使用了非法间接,而 <2> 它不能从 list::iterator 转换为 int。两个错误都发生在第十四行。

有谁知道我做错了什么以及如何正确重载间接运算符?

注意:如果您需要查看更多代码,请告诉我哪一部分,因为我不想将整个代码放在这里,因为它大约有 205 行,其中 204 行(我认为)没有任何错误。

0 投票
4 回答
7082 浏览

c++ - 如何区分(重载时)运算符++的前缀和后缀形式?(C++)

因为我已经operator++为迭代器类重载了

但是当我尝试做

我收到关于没有 postifx 的警告++,使用前缀形式。我怎样才能特别重载前缀/后缀形式?

0 投票
3 回答
23551 浏览

c++ - 如何在 C++ 中使用自定义类型作为映射的键?

我正在尝试将自定义类型分配为std::map. 这是我用作键的类型:

与 一起使用时std::map,我收到以下错误:

如果我将其更改为struct以下,一切正常:

没有任何改变,除了操作符被重载为friend。为什么我的第一个代码不起作用?

0 投票
5 回答
783 浏览

c++ - 关于C++中赋值运算符的问题

请原谅在某些人看来是一个非常简单的问题,但我想到了这个用例:

我想做的是使用如下语句:

现在拥有v我的分数所代表的价值。我将如何在 C++ 中做到这一点?

0 投票
2 回答
306 浏览

c# - 如何编写两个参数都是接口的重载运算符

我的大部分东西都在使用界面。我找不到创建重载运算符 + 的方法,它允许我对实现 IPoint 接口的任何对象执行加法

代码