問題タブ [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 投票する
12 に答える
30164 参照

c# - C#で「=」をオーバーロードできないのはなぜですか?

C# で「=」をオーバーロードできないのはなぜですか? より良い説明を得ることができますか?

0 投票する
7 に答える
9620 参照

c++ - オーバーロード演算子 << - C++

バックグラウンド

内部で vector<std::string> を使用するコンテナ クラスがあります。内部ベクトルに対してpush_back()を実行するメソッドAddChar(std::string)をこのラッパー クラスに提供しました。私のコードでは、コンテナに複数のアイテムを追加する必要があります。そのために私は使用しなければなりません

これにより、コードが大きくなります。そのため、より簡単にするために、演算子 << をオーバーロードする予定です。書けるように

2 つのアイテムが基になるベクターに追加されます。

これが私がそのために使用したコードです

期待どおりに動作しています。

質問

  1. 演算子のオーバーロードは正しく記述されていますか?
  2. このような状況で演算子をオーバーロードすることは良い習慣ですか?
  3. このコードにパフォーマンスの問題やその他の問題はありますか?

何かご意見は?

編集

優れたコメントを聞いた後、<< をオーバーロードしないことにしました。ここでは意味がありません。演算子のオーバーロード コードを削除しました。これが最終的なコードです。

これにより、追加できます

C# では、params キーワードを使用してこれをより簡単に行うことができます。コードは次のようになります

C++ では、...を使用してパラメーターの可変長を指定できることを知っています。しかし、知る限り、タイプセーフではありません。そうすることは推奨される方法ですか?書けるように

返信ありがとうございます。

0 投票する
6 に答える
17205 参照

c++ - C ++:クラス内からoperator []にアクセスする便利な方法?

operator[]配列の添え字/角かっこ演算子であるオーバーロードするC++クラスがあります。これは、クラスの外で非常に便利で、foo[bar]を書くことができます。ただし、クラスにメソッドを実装しているときに、この表記法を使用する方法がわかりません。

私は書くことができることを知っていますoperator[](bar)this->operator[](bar)、それらはかなり扱いにくく、そもそもオペレーターの利便性の多くを奪います。(演算子を呼び出す新しいメソッドを追加できることもわかっています。)何かを書くthis[bar]方法やthis->[bar]、同様に素晴らしいものはありますか?

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

c++ - 演算子のオーバーロード c++ を使用して監視する

コンテンツの書き込み/読み取りまたは変更を検出できるように、すべての演算子がオーバーロードされたラッパー クラスを作成したいと考えています。例えば:

誰かがすでにそれをしましたか?そうでない場合、何も見逃さないようにするには、どの演算子をオーバーロードする必要がありますか?

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

c# - operator== をオーバーロードした後、2 つの変数が同じオブジェクトを指しているかどうかを比較する方法は?

比較演算子のオーバーロード、2 つの変数が同じオブジェクト (値ではない) を指している場合の比較方法

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

c++ - << 演算子のオーバーロード C++ - クラスへのポインタ

正常に動作しますが、代わりにクラス インスタンスへのポインターを使用したいと思います。すなわち

これは可能ですか?もしそうなら、構文は何ですか?ありがとう

編集:コンパイラエラーは

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

c++ - C++ でのグローバル演算子 new/delete のオーバーロード

パフォーマンスに敏感なアプリケーションのためにグローバル演算子 new と delete をオーバーロードしようとしています。http://www.informit.com/articles/article.aspx?p=30642&seqNum=3で説明されている問題と、Intel TBB のアロケーターhttp://www.intel.com/technology/itj/を使用するための推奨事項を読みました。 2007/v11i4/5-foundations/5-memory.htm

初めて new と delete をオーバーロードするので、いくつか質問があります。

「新しい」呼び出しを含むすべてのファイルに、オーバーロードされた新しい関数を含む新しいヘッダー Allocator.h (または Pre.h) を含める必要がありますか? これは面倒です。

それとも、Allocator.h (前) を各翻訳単位にインクルードする "gcc -include Allocator.h ..." を使用する必要がありますか? コード プラットフォームを可能な限り独立させたいと考えています。すべてのコンパイラが「gcc -include」に類似したものをサポートしていますか?

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

c++ - 算術演算子のオーバーロード

代入演算子は次のように宣言できます

T&演算子=(const t&);

クラス内ですが、算術演算子をそのように定義することはできません。それは友達機能でなければなりません。理由がわかりませんか?説明してもらえますか?

0 投票する
8 に答える
10953 参照

c# - 代入演算子 (=) をオーバーライドする C# の模倣

私が持っているやや単純なラッパークラスに少し問題があります。

次のようになります。

T との間の暗黙的なコンバーターをオーバーライドしたので、T 自体のインスタンスのように動作します。

例えば

ただし、2 番目の Wrapper クラスの値のみを割り当てたいので、Wrapper の 1 つのインスタンスを別のインスタンスに割り当てるときに、少し問題があります。

だから今、私はこれをしなければなりません:

または、プロパティを通じて _value を公開します。

ただし、これはライブラリにあり、ユーザーがこれを覚えていることに依存したくないので、代入演算子のオーバーライドを模倣する方法を知っていますか?

ポインターを変更するだけの問題 (クラス インスタンスを別のインスタンスに割り当てるときのように) は、これらの Wrapper オブジェクトへのポインターの辞書を持っているため、辞書が停止するため、それらを常に変更することができないことです。そしたらマッチング。

これがややこしいかどうかはわかります。重要なことを省略している場合は、お気軽にお問い合わせください :-)