タグ付けされた質問 「operator-overloading」

演算子のオーバーロードは、関係するオペランドのタイプに応じて演算子のカスタム実装を可能にするプログラミング言語の機能です。新しい演算子を定義できる言語もあれば、既存の演算子の再定義のみを許可する言語もあります。

2
演算子のオーバーロード:メンバー関数と非メンバー関数?
メンバー関数として宣言されたオーバーロードされた演算子は非対称であると読みましたthis。これは、パラメーターを1つしか持つことができず、自動的に渡される他のパラメーターがポインターであるためです。したがって、それらを比較する基準はありません。一方、オーバーロード演算子はとして宣言されfriendている対称我々は、同じタイプの2つの引数を渡し、したがって、それらを比較することができるからです。 私の質問は、ポインターの左辺値を参照と比較できるのに、なぜ友達が好まれるのですか?(非対称バージョンを使用すると、対称バージョンと同じ結果が得られます)なぜSTLアルゴリズムは対称バージョンのみを使用するのですか?

10
`+ =`のC#演算子のオーバーロード?
の演算子のオーバーロードを実行しようとしていますが、実行+=できません。の演算子をオーバーロードにすることしかできません+。 どうして? 編集する これが機能しない理由は、Vectorクラス(XおよびYフィールド付き)があるためです。次の例を考えてみましょう。 vector1 += vector2; オペレーターのオーバーロードが次のように設定されている場合: public static Vector operator +(Vector left, Vector right) { return new Vector(right.x + left.x, right.y + left.y); } その後、結果はvector1に追加されませんが、代わりにvector1も参照によりまったく新しいベクターになります。

13
無限再帰なしで「==」演算子オーバーロードでnullをチェックするにはどうすればよいですか?
以下は==演算子オーバーロードメソッドで無限再帰を引き起こします Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); } nullを確認するにはどうすればよいですか?


6
TypeScriptでメソッドのオーバーロードを行う方法はありますか?
TypeScript言語でメソッドのオーバーロードを行う方法はありますか? 私はこのようなことを達成したいです: class TestClass { someMethod(stringParameter: string): void { alert("Variant #1: stringParameter = " + stringParameter); } someMethod(numberParameter: number, stringParameter: string): void { alert("Variant #2: numberParameter = " + numberParameter + ", stringParameter = " + stringParameter); } } var testClass = new TestClass(); testClass.someMethod("string for v#1"); testClass.someMethod(12345, "string for …

5
__cmp__の代わりに__lt__
Python 2.xには、比較演算子、__cmp__またはなどの「豊富な比較演算子」をオーバーロードする方法が2つあります__lt__。 豊富な比較オーバーロードが好ましいと言われていますが、なぜそうなのでしょうか。 豊富な比較演算子はそれぞれを実装する方が簡単ですが、それらのいくつかをほぼ同じロジックで実装する必要があります。ただし、組み込みcmpおよびタプルの順序付けを使用できる場合は、__cmp__非常に単純になり、すべての比較が実行されます。 class A(object): def __init__(self, name, age, other): self.name = name self.age = age self.other = other def __cmp__(self, other): assert isinstance(other, A) # assumption for this example return cmp((self.name, self.age, self.other), (other.name, other.age, other.other)) この単純さは、豊富な比較の6(!)すべてをオーバーロードするよりもはるかによく私のニーズを満たしているようです。(ただし、「スワップされた引数」/反映された動作に依存している場合は、「わずか」4に下げることができますが、私の考えでは、複雑さの正味の増加になります。) オーバーロードするだけの場合に知っておく必要のある予期しない落とし穴はあり__cmp__ますか? 私は理解して<、<=、==、などの事業者が他の目的のために、オーバーロードすることができ、そして、彼らが好きな任意のオブジェクトを返すことができます。私はそのアプローチのメリットについて尋ねているのではなく、数値に対して意味するのと同じ意味でこれらの演算子を比較に使用する場合の違いについてのみ尋ねています。 更新: Christopherが指摘したように、cmpは3.xで姿を消しています。上記と同じくらい簡単に比較を実装できる代替手段はあります__cmp__か?

8
JavaScript:演算子のオーバーロード
私はJavaScriptを数日間使用していて、定義したオブジェクトの演算子をオーバーロードしたいところまで来ました。 グーグルでこれを検索した後、正式にこれを行うことはできないようですが、このアクションを実行するための長い時間のかかる方法を主張している人もいます。 基本的に私はVector2クラスを作成し、次のことができるようにしたいと考えています。 var x = new Vector2(10,10); var y = new Vector2(10,10); x += y; //This does not result in x being a vector with 20,20 as its x & y values. 代わりに私はこれをしなければなりません: var x = new Vector2(10,10); var y = new Vector2(10,10); x = x.add(y); //This results in …

4
演算子<<は引数を1つだけ取る必要があります
ああ #include "logic.h" ... class A { friend ostream&amp; operator&lt;&lt;(ostream&amp;, A&amp;); ... }; logic.cpp #include "a.h" ... ostream&amp; logic::operator&lt;&lt;(ostream&amp; os, A&amp; a) { ... } ... 私がコンパイルすると、それは言う: std :: ostream&logic :: operator &lt;&lt;(std :: ostream&、A&) 'は引数を1つだけ取る必要があります。 何が問題ですか?

18
演算子[] []オーバーロード
オーバーロードすることは可能ですか []演算子を2回ですか?許可するには、次のようなものですfunction[3][3](2次元配列のように)。 可能であれば、いくつかのサンプルコードをご覧ください。

16
負の数を処理するC / C ++ / Obj-Cでモジュロ(%)演算子をコーディングする方法
(数学者としての)C派生言語に対する私のペットの嫌いなものの1つはそれです (-1) % 8 // comes out as -1, and not 7 fmodf(-1,8) // fails similarly What's the best solution? C++ allows the possibility of templates and operator overloading, but both of these are murky waters for me. examples gratefully received.


3
unique_ptr <0または演算子よりも少ないことは何ですか?
私が書いていないコードを扱っています。私はこの声明を持っています: // p is type of std::unique_ptr&lt;uint8_t[]&gt; if (p &lt; 0) { /* throw an exception */ } それではp &lt; 0、この文脈ではどういう意味ですか? 上のドキュメントページ、私は私の場合はあると信じて16) y &lt; nullptrいる、0ですnullptr。 しかし、それは何をしますか?

2
テンプレートクラスの演算子+オーバーロードの戻り値の型
テンプレート化されたnumクラスを構築しようとしています。このクラスには、valタイプがのパブリック属性が必要Tです。これは、唯一のテンプレートパラメータです。さらに、値を提供する場合は、属性(val)をこの値で初期化する必要があります。これを行うには、次のコードを作成しました。 #include &lt;iostream&gt; template&lt;class T&gt; class Num { public: T val; Num():val(0) { std::cout&lt;&lt;"default constr used"&lt;&lt;std::endl; } Num(T value):val(value) {std::cout&lt;&lt;"constr (T value) used"&lt;&lt;std::endl; } ~Num() { std::cout&lt;&lt;"destructor used"&lt;&lt;std::endl; } template&lt;typename U&gt; Num operator+(const Num&lt;U&gt;&amp; other) { return val+other.value; } }; さらにmain()、次のようなプログラムをテストする関数を作成しました。 int main() { std::cout &lt;&lt; Num&lt;int&gt;(1) + Num&lt;double&gt;(2.0); return …

2
楽演算子のオーバーロード
次のコードを使用します。 use v6d; # sub circumfix:&lt;α ω&gt;( @a ) { # @a[0] &gt;= @a[1] &amp; @a[0] &lt;= @a[2]; # }; sub circumfix:&lt;α ω&gt;( $a, $b, $c ) { $a &gt;= $b &amp; $a &lt;= $c; }; if (α &lt;5 0 10&gt; ω) { say 'Truthy'; } else { say 'Falsey'; …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.