问题标签 [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 投票
4 回答
1036 浏览

c++ - 实现运算符重载的最佳方法是什么?

在我在 C++ 中学到的所有东西中(不是很多),运算符重载似乎是最困难的。一般而言,何时最好将运算符重载编写为友元函数?我什么时候必须明确使用*this?使用临时对象总是不好?

0 投票
6 回答
2578 浏览

c# - C# 中的重载运算符 =。我如何接受其他类型?

所以一位朋友告诉我游戏是如何被黑的以及该技术是如何工作的。然后他问什么是防止这种攻击的最佳方法。我知道的最直接的方法是 A) 洗牌重要值的位 B) 对值进行散列并每次比较它们(保存分数或金钱的 int 可能很少被检查)。

然后我尝试了 C# 中的实现,我无法重载 = 运算符。我怎样才能做到这一点?

前代码。

0 投票
2 回答
2350 浏览

c# - 如何在隐式运算符中使用泛型?

我有一个非常简单的 c++ 类:

这使我可以创建一个具有 T 为我想要的任何类型的 pt。我也可以Pt_t<s8> = Pt_t<u64>;没有问题。我如何在 C# 中做同样的事情?我尝试了以下并得到了一个错误:

0 投票
3 回答
2145 浏览

c# - 如何为泛型类重载运算符?

在我看来,这不仅仅是我的问题。
请不要重复关闭我的问题,因为我查看了这些问题但没有找到解决方案。

你知道编译器告诉了什么:“运算符'-'不能应用于'T'和'T'类型的操作数”,即适用于所有运算符。
那么,对此最好的决定是什么?据我所知,接口不能包含运算符,因此唯一的方法是 T 类型的抽象基类。而且,正如我发现的那样,不能将操作符定义为抽象的。

0 投票
6 回答
47240 浏览

php - 是否可以在 PHP 中重载运算符?

具体来说,我想创建一个 Array 类并想重载 [] 运算符。

0 投票
8 回答
6562 浏览

c++ - 在 C++ 中创建一个 Point 类

现在我正在使用 std::pair 来表示 C++ 中的二维点。但是,我对不得不写作感到恼火

而不是能够重载 operator+ 和 operator-。

所以,我的问题是,要让我的点课,我应该

  • 公开派生自 std::pair 并添加我自己的成员函数?这很好,因为我所有的代码都可以保持不变。我不会做类似的事情,std::pair<double, double>* p = new Point;所以我不必担心虚拟析构函数之类的事情。
  • 滚动我自己的 Point 类,这很烦人,因为我正在复制 std::pair 的功能,但是我“以纯粹的方式做”。
  • 为 std::pair 制作 operator+ 和 operator- 的模板特化,诚然我不记得它们是放在源文件还是头文件中。

我想这是有争议的,我真的很想做#1,但我不知道这是否是一个坏主意,因为我听说从 STL 继承是一个禁忌。

0 投票
5 回答
1648 浏览

.net - DateTime 差异运算符考虑夏令时?

据我所知,该DateTime类型的差分运算符考虑闰年:所以

但是夏令时呢?

0 投票
5 回答
1717 浏览

c++ - 为什么 Visual C++ 编译器在这里调用错误的重载?

为什么 Visual C++ 编译器在这里调用错误的重载?

我有一个 ostream 的子类,用于定义格式化缓冲区。有时我想创建一个临时的并立即使用通常的 << 运算符将一个字符串插入其中,如下所示:

不幸的是,程序调用 operator<<(ostream, void *) 成员重载,而不是 operator<<(ostream, const char *) 非成员重载。

我编写了下面的示例作为测试,我在其中定义了自己的 M2Stream 类来重现问题。

我认为问题在于 M2Stream() 表达式会产生一个临时的,这会导致编译器更喜欢 void * 重载。但为什么?事实证明,如果我为非成员重载 const M2Stream & 设置第一个参数,我会感到模棱两可。

另一个奇怪的事情是,如果我首先定义一个 const char * 类型的变量然后调用它,而不是文字 char 字符串,它会调用所需的 const char * 重载,如下所示:

就好像文字字符串的类型与 const char * 变量不同!他们不应该是一样的吗?当我使用临时和文字字符字符串时,为什么编译器会调用 void * 重载?

输出:

0 投票
3 回答
5928 浏览

c++ - 让 C++ 类像自定义 ostream、sstream

我有一个 C++ 类MyObject,我希望能够像向 osstream 一样提供这些数据(但与直接 sstream 不同,传入数据以特殊方式格式化)。我似乎无法弄清楚如何为 MyObject 重载运算符以吃给它的输入。

我想要它,这样每一个送入的物品都被: : 包围

所以在给定的例子中,s = ":Hello::12345" 应该是最终结果。我的问题是,我怎样才能告诉对象,当有 a 时<<something,将 :: 放在某物周围。

这可能吗?

0 投票
4 回答
1142 浏览

c++ - 运算符重载 >>

我对 C++ 运算符重载非常陌生,并且遇到了一些初期问题。

我已经定义:

void Graph::operator>>(const char* param)

上述函数必须接受一个字符串作为输入,然后对该字符串执行某些操作。我如何调用这个函数?我可以通过哪些方式使用它?