問題タブ [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++ オーバーロード `-`

クラス グラフの演算子を「-」にオーバーロードしました。その使用は完全に直感的ではありません (悪いコーディング - 私は知っています) が、グラフ 3 = グラフ 2-グラフ 1 を実行すると、グラフ 3 はグラフ 2 とグラフ 1 の両方でそれらの頂点のみを受け取ることになっています。

したがって、コードを記述し、デバッガーを実行すると、演算子関数は新しい「グラフ」を作成して返すように見え、適切な頂点を新しいグラフに追加し、デバッガーは op 関数を終了するように見えます。 、しかし、メインに戻ることはありません。まるで私が何かを入力するのを待っているかのようです。エラー メッセージは表示されません。

コードは次のとおりです。

演算子関数:

コードブロックを使用しています。

コピー コンストラクター:

代入演算子:

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」にはありません。

null を返します。

では、値型の「==」演算子のデフォルトの実装はどこにあるのでしょうか? リフレクションを介して呼び出すことができるようにしたい:


編集#1:

私はこれを試しましたが、うまくいきませんでした:


編集#2:

これも試しましたが、愛はありません:

ValueType のこの .Equals 演算子は、この型チェック (.NET Reflector から取得) により機能しないと考えています。

0 投票する
4 に答える
77190 参照

c++ - 「演算子=非静的メンバーでなければならない」とはどういう意味ですか?

私は二重リンクリストを作成している途中で、operator =をオーバーロードして、リストを別のリストと等しくしました。

しかし、コンパイルしようとすると、このエラーが発生します。

また、役立つ場合は、74行目が定義の最後の行であり、「}」が付いています。

0 投票する
2 に答える
9484 参照

c++ - 間接演算子をオーバーロードする方法は?(C ++)

リストクラスのメンバークラスとしてイテレータクラスを作成しようとしています。また、間接演算子(*)をオーバーロードして、それが指しているリストにアクセスしようとしています。

ここlstptrで、はリストへのcurrentポインタ、はノードクラスへのポインタ、ノードクラスにdataはタイプ。のデータメンバーが含まれていますT

イテレータは次のように宣言されます。

オーバーロードされた演算子*の関数定義を正常にコンパイルできますが、次のようなことをしようとすると、次のようになります。

表示されるエラーは、<1>は不正な間接参照を使用していること、<2>はlist::iteratorからintに変換できないことを示しています。両方のエラーは14行目で発生します。

誰かが私が間違っていることと、間接演算子を正しくオーバーロードする方法を知っていますか?

注意:さらにコードを表示する必要がある場合は、どの部分を教えてください。コード全体をここに配置したくないのは、205行であり、そのうちの204行にはエラーがないためです。

0 投票する
4 に答える
7082 参照

c++ - (オーバーロード時に)operator ++のプレフィックス形式とポストフィックス形式を区別する方法は?(C ++)

operator++イテレータクラスのをオーバーロードしたため

しかし、私がやろうとすると

++プレフィックス形式を使用して、postifxがないという警告が表示されます。どうすればprefix/postifxフォームを具体的にオーバーロードできますか?

0 投票する
3 に答える
23551 参照

c++ - C ++でマップのキーとしてカスタムタイプを使用するにはどうすればよいですか?

のキーとしてカスタムタイプを割り当てようとしていますstd::map。これが私がキーとして使用しているタイプです:

と一緒に使用するとstd::map、次のエラーが発生します。

を以下のものに変更するstructと、すべてが機能します。

オペレーターがfriendとしてオーバーロードされていることを除いて、何も変更されていません。最初のコードが機能しないのはなぜですか?

0 投票する
5 に答える
783 参照

c++ - C++ の代入演算子に関する質問

非常に単純な質問に思われるかもしれませんが、私は次の使用例を念頭に置いています。

私がやりたいのは、次のようなステートメントを使用することです。

v私の分数で表される値を保持するようになりました。C ++でこれを行うにはどうすればよいですか?

0 投票する
2 に答える
306 参照

c# - 両方の引数がインターフェイスであるオーバーロード演算子を作成するにはどうすればよいですか

私はほとんどのものにインターフェースを使用しています。IPointインターフェイスを実装するオブジェクトに追加を実行できるオーバーロード演算子を作成する方法が見つかりません+

コード