問題タブ [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.
c++ - 演算子のオーバーロードを実装する最良の方法は何ですか?
私が C++ で学んだすべてのこと (それほど多くはありません) の中で、演算子のオーバーロードが最も難しいようです。一般的に、演算子のオーバーロードをフレンド関数として記述するのが最適なのはいつですか? いつ明示的に使用する必要があります*this
か? 一時オブジェクトを使用するのは常に悪いですか?
c# - オーバーロード演算子=C#で。他のタイプを受け入れるにはどうすればよいですか?
そのため、友人がゲームがハッキングされた方法とテクニックがどのように機能したかを教えてくれました。それから彼はその種の攻撃を防ぐための最良の方法は何かと尋ねました。私が知っていた最も簡単な方法は、A)重要な値のビットをシャッフルするB)値をハッシュし、毎回比較することでした(スコアまたはお金を保持するintはめったにチェックされない可能性があります)。
次に、C#での実装を試しましたが、=演算子をオーバーロードできませんでした。これどうやってするの?
元のコード。
c# - 暗黙の演算子でジェネリックを使用するにはどうすればよいですか?
非常に単純な C++ クラスがあります。
これにより、任意の型として T を持つ pt を作成できます。こちらもPt_t<s8> = Pt_t<u64>;
問題なくできます。C#で同じことを行うにはどうすればよいですか? 以下を試してみましたが、エラーが発生しました。
c# - ジェネリック クラスの演算子をオーバーロードするにはどうすればよいですか?
それは私だけの問題ではないように思えます。
これらの質問を調べても解決策が見つからなかったので、私の質問を重複として閉じないでください。
コンパイラが言うことを知っています:「演算子 '-' は、タイプ 'T' および 'T' のオペランドには適用できません」、つまりすべての演算子です。
それで、これに対する最良の決定は何ですか?私の知る限り、インターフェイスには演算子を含めることができないため、唯一の方法は T 型の抽象基本クラスですが、私が発見したように、operatoes を抽象として定義することはできません。
php - PHPで演算子をオーバーロードすることは可能ですか?
具体的には、配列クラスを作成し、[]演算子をオーバーロードしたいと思います。
c++ - C++でPointクラスを作成する
現在、c++で2Dポイントを表すためにstd::pairを使用しています。しかし、私は書く必要があることに悩まされています
operator+とoperator-をオーバーロードできる代わりに。
だから、私の質問は、私のポイントクラスを作るために、私はすべきかということです
- std :: pairから公に派生し、自分のメンバー関数を追加しますか?私のコードはすべて同じままでいられるので、これは素晴らしいことです。私はそのような
std::pair<double, double>* p = new Point;
ことをするつもりはないので、仮想デストラクタのようなことを心配する必要はありません。 - std :: pairの機能を複製しているので面倒な、自分のPointクラスをロールしますが、「純粋な方法で実行しています」。
- std :: pair用にoperator+とoperator-のテンプレートを特殊化します。これは、ソースファイルとヘッダーファイルのどちらに含まれるかを確かに覚えていません。
議論の余地があると思います。本当に#1をやりたいのですが、STLからの継承はノーノーだと聞いているので、それが悪い考えかどうかはわかりません。
.net - DateTime差分演算子は夏時間を考慮していますか?
私が知る限り、DateTime
型の差分演算子はうるう年を考慮しています:
しかし、サマータイムはどうでしょうか。
c++ - Visual C++ コンパイラがここで間違ったオーバーロードを呼び出すのはなぜですか?
Visual C++ コンパイラがここで間違ったオーバーロードを呼び出すのはなぜですか?
フォーマット用のバッファを定義するために使用する ostream のサブクラスがあります。一時的なものを作成し、次のような通常の << 演算子を使用してすぐに文字列を挿入したい場合があります。
残念ながら、このプログラムは、operator<<(ostream, const char *) 非メンバー オーバーロードではなく、operator<<(ostream, void *) メンバー オーバーロードを呼び出します。
問題を再現する独自の M2Stream クラスを定義するテストとして、以下のサンプルを作成しました。
問題は、 M2Stream() 式が一時的なものを生成し、これにより何らかの形でコンパイラが void * オーバーロードを優先することだと思います。しかし、なぜ?これは、非メンバー オーバーロード const M2Stream & の最初の引数を作成すると、あいまいさが生じるという事実によって裏付けられています。
もう 1 つの奇妙な点は、次のように、リテラル char 文字列の代わりに、最初に const char * 型の変数を定義してから呼び出すと、目的の const char * オーバーロードが呼び出されることです。
リテラル文字列が const char * 変数とは異なる型を持っているかのようです! それらは同じであるべきではありませんか?また、一時文字列とリテラル char 文字列を使用すると、コンパイラが void * オーバーロードを呼び出すのはなぜですか?
出力:
c++ - C ++クラスをカスタムostream、sstreamのように動作させます
私はC++クラスを持っており、MyObject
このデータをosstreamと同じようにフィードできるようにしたいと考えています(ただし、直接sstreamとは異なり、受信データを特別な方法でフォーマットします)。MyObjectが与えられた入力を食べるために演算子をオーバーロードする方法を理解できないようです。
私はそれが欲しいので、供給されるすべてのアイテムは::に囲まれています
したがって、与えられた例では、s = ":Hello::12345"が最終的な結果になるはずです。私の質問は、オブジェクトに、いつ<<something
でも何かの周りに::を置くことをどのように伝えることができるかです。
これは可能ですか?
c++ - 演算子のオーバーロード >>
私はC ++演算子のオーバーロードに非常に慣れておらず、歯が生える問題を抱えています。
私は定義しました:
void Graph::operator>>(const char* param)
上記の関数は、文字列を入力として受け取り、その文字列に対して特定のアクションを実行する必要がありました。この関数を呼び出すにはどうすればよいですか? どのような使い方ができますか?