問題タブ [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.
python - Python のクラスで __getitem__ をサポートするが、反復を許可しないようにするにはどうすればよいですか?
をサポートするクラスを定義したいのですが__getitem__
、反復は許可されません。例えば:
B
強制的for x in cb:
に失敗させるには、クラスに何を追加できますか?
c++ - これは、左ストリーム演算子をオーバーロードする正しい方法ですか?(C ++)
この関数宣言は私にエラーを与えます:
エラーは次のとおりです。
handは私が作成したクラスであり、displayはタイプのパブリックデータメンバーですchar*
。
誰かが私が間違っていることを教えてもらえますか?
c# - 人々がVBで使用できるように、C#でキャスト演算子のオーバーロード用のキャストメソッドを提供する必要がありますか?
古いVB.net(VB .NET 2005より前?)ではC#クラスでオーバーロードされた演算子を使用できないことをどこかで読みました。オーバーロードされたキャスト演算子に当てはまりますか?
いずれにせよ、C#クラスライブラリにそれらと算術メソッドを他の言語の実際のメソッドとして含めないことは不利だと思いますか?
delphi - Delphiレコードの代入演算子をオーバーロードできますか?
動的配列を含むレコードがあります。ある配列変数を別の配列変数に割り当てる場合、実際にはその配列へのポインターのみが割り当てられるのが普通です。つまり、これを行うと、一方のサイズを変更するまで、両方の変数が同じ配列を指します。したがって、配列の別のコピーを変数に割り当てたい場合は、Copy()関数を使用します。
ただし、この場合、私の配列はレコードのフィールドです。
タイプTMyRecの2つの変数を宣言してから、一方を他方に割り当てると、両方のレコードの「配列」フィールドがメモリ内の同じアドレスを指します。
この種の問題を解決するために、次のように割り当て演算子をオーバーロードすることにしました。
これが機能する場合、TMyRecord変数を相互に割り当てた後、レコード内のすべての配列フィールドを個別にコピーする必要はありません。
これが私がすることです:
演算子のオーバーロードを希望どおりに機能させる方法はありますか?問題は、デフォルトの代入演算子をオーバーロードしようとしていることです。それは不可能ですか?
c++ - スマート ポインターは、ラップしているオブジェクトへの関数呼び出しを選択的に非表示またはリダイレクトできますか?
特定のオブジェクトが参照されるプロジェクトに取り組んでいます。これは、COM と非常によく似た設定です。とにかく、私たちのプロジェクトには、これらのオブジェクトに対して Add() と Release() を明示的に呼び出す必要性を軽減するスマート ポインターがあります。問題は、開発者がまだスマート ポインターを使用して Release() を呼び出している場合があることです。
私が探しているのは、スマート ポインターから Release() を呼び出すと、コンパイル時または実行時エラーが発生する方法です。コンパイル時間は私には不可能のようです。ランタイム ソリューション (以下のコードを参照) があると思っていましたが、コンパイルもうまくいきません。どうやら、operator->() を使用した後の暗黙的な変換は許可されていません。
とにかく、私が達成しようとしていることを達成する方法を誰かが考えられますか?
助けてくれて本当にありがとうございます!
ケビン
c++ - C++ のオーバーロード演算子、代入、ディープ コピー、および加算
私は現在、古い大学の教科書を読み直しながら演算子のオーバーロードについて調査していますが、何かを誤解していると思うので、これが一部の回答者にとって簡単な評判になることを願っています. これが重複している場合は、正しい方向に向けてください。
(この段階では) 1 つのメンバー val (int) を持つ単純なカウンター クラスを作成しました。
これらのカウンターのうち 3 つを varOne から varThree に初期化し、3 番目のカウンターを最初の 2 つの合計にします (たとえば、以下のコードでは varThree.val が 5 に設定されています)。
次のように operator+ をオーバーロードしました。
これを非メンバー関数にし、プライベート値にアクセスできるようにカウンター クラスのフレンドにしました。
私の問題は、別のプライベート メンバーpVal (int へのポインター) を追加するときに始まります。varThree = varOne
これを追加すると、varOne が破棄されても varThree.pVal は引き続き同じメモリ ビットを指しているため、単純なコピーを実行できなくなります。
私はoperator=
次のようにオーバーロードしました。
varThree = varOne
今、すべてが正しくコピーされるようなことをするvarThree = varOne + varTwo
と、次のエラーが発生します。
counter::operator=
からの戻り出力に対処するのに問題があるように見え、返される型を受け入れるためにさらにoperator+
オーバーロードする必要がありますが、運がなく、何かをしたのではないかと考え始めています根本的に間違っています。operator=
operator+
c++ - テンプレート化されたクラスでのバイナリ演算子のオーバーロード
私は最近、演算子のオーバーロード/テンプレートの能力を測定しようとしていて、小さなテストとして、以下のContainerクラスを作成しました。このコードは正常にコンパイルされ、MSVC 2008(11を表示)で正しく機能しますが、MinGW/GCCとComeauの両方がoperator+
過負荷でチョークします。私はMSVCよりもそれらを信頼しているので、自分が間違っていることを理解しようとしています。
コードは次のとおりです。
これはComeauが与えるエラーです:
Comeau / MingGWにボールをプレーさせるのに苦労しているので、そこで皆さんに目を向けます。私の脳がC++構文の重みでこれほど溶けてから久しぶりなので、少し恥ずかしい思いをします;)。
編集:最初のComeauダンプにリストされている(無関係な)左辺値エラーを排除しました。
.net - F# と op_GreaterThan
私は最近、Microsoft Solver Foundation Services を利用して F# で何かを書き込もうとしましたが、そうしているうちに問題にぶつかりました。C# では t1 > t2 として単純に表現できる (Term > Term) 条件を表現する必要がありました。別の Term オブジェクトを返します。代わりに、F# では、t1 > t2 を使用すると項ではなく bool が生成されるのと同じ結果を得るために、Term.op_GreaterThan を呼び出す必要がありました。
F# がブール値を生成する場合にのみ op_GreaterThan を選択するのはなぜですか? また、Term が IComparable を実装していない場合、F# の t1 > t2 の解釈にはどのような意味があるのでしょうか?
構造比較の概念に基づいて平等と全体の平等でそのようなことを行う理由を理解していることに注意してください。それを「より大きい」に拡張する方法がわかりません/」
f# - F# と演算子のオーバーロード: (>) と (^)
では、なぜ F# で > 演算子と ^ 演算子をオーバーロードできるのに、使用できないのか説明してもらえますか?
F# コードをライブラリとしてコンパイルし、VB からそれらの演算子を使用すると、それらはすべて機能します。C# からこれらの演算子を使用すると、op_Concatenate 以外はすべて機能します (期待どおり)。しかし、F# はそれらのいくつかを無視するだけでなく、静的型チェッカーはその計画をユーザーに通知することさえしません。
コードサンプルを編集