演算子の多重定義
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/05/03 05:53 UTC 版)
Ceylon言語では、プログラミング言語で一般的に混乱の原因とみなされている演算子の多重定義の仕組みを提供していない。その代わりCeylon言語には、組み込み型のメソッドの省略形であるような演算子については多相性を利用できる仕組みがある。これは演算子の多重定義よりも安全で簡素な仕組みである。
※この「演算子の多重定義」の解説は、「Ceylon」の解説の一部です。
「演算子の多重定義」を含む「Ceylon」の記事については、「Ceylon」の概要を参照ください。
演算子の多重定義
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/16 02:54 UTC 版)
アンマネージドのC++に関しては演算子の多重定義はおおむね正確に働く。すべての*は^となり、すべての&は%となるが、それ以外の構文はそのままでも多重定義を実装できる。また、それに加えてクラス自身に対してだけでなくそれらのクラスへのハンドルに対しても演算子多重定義が可能となった。従来のC++ではポインタ型同士に対して多重定義できなかった。また、CLIに適合するため演算子の多重定義をクラスの静的メンバとして実装することも可能になった。.NET Frameworkの参照クラスでもハンドルを引数に取る演算子の多重定義は静的メンバとして実装されている。 これは、中の文字列が同一なら、2つの異なるStringの参照を==演算子で比較しても、Stringの==演算子の多重定義によって結果がtrueとなることを意味する。もちろん、マネージコードを書くときだけに限らず、常にそうあるべきであるように、演算子の多重定義は多態的でない。従って、Object^へのキャストは多重定義のセマンティクスから逃れることになる。 //参照演算子の多重定義の効果String ^s1 = "abc";String ^s2 = "ab" + "c";Object ^o1 = s1;Object ^o2 = s2;s1 == s2; // trueo1 == o2; // false 標準的なセマンティクスではネイティブ型や値型、仮に型Tに対しては、従来のC++のようにTやT const&を引数に取る演算子を定義し、参照クラス型Rに対してはハンドルR^を引数に取る演算子を定義することになる。ただ、C++だけのプロジェクトでは、ハンドル型を引数に取る演算子多重定義を使わないようにする、つまり参照クラスに対しても従来のC++の演算子の多重定義方式のように参照 (R const%) を引数に取るという手段も考えられる。そのような例は、演算子ではないがコピーコンストラクタや代入演算子の実装で使われることが考えられる。
※この「演算子の多重定義」の解説は、「C++/CLI」の解説の一部です。
「演算子の多重定義」を含む「C++/CLI」の記事については、「C++/CLI」の概要を参照ください。
演算子の多重定義
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/09 03:43 UTC 版)
多重定義を使った利用者定義演算子の一種である。詳細は当該記事を参照のこと。 オブジェクト指向言語においては数値型とオブジェクトを同じ関数で処理するために必須の機能である(後述のテンプレートと多重定義参照)。
※この「演算子の多重定義」の解説は、「多重定義」の解説の一部です。
「演算子の多重定義」を含む「多重定義」の記事については、「多重定義」の概要を参照ください。
- 演算子の多重定義のページへのリンク