差分

ナビゲーションに移動 検索に移動

演算子のオーバーロード

2,009 バイト追加, 2019年10月9日 (水) 04:42
編集の要約なし
'''演算子のオーバーロード'''とは、一部の[[プログラミング言語]]に搭載されている「+」や「-」などの[[演算子]]の意味を変えてしまう機能である。

==概要==
大雑把にいえば「演算子の左辺と右辺の2個を[[引数]]とする[[関数]]」に置き換えられ、その関数の中身は自由に定義できるというものである
<syntaxhighlight lang="perl">
// このような式を
a + b

//以下のような関数として扱うことができる
func(a,b){
}
</syntaxhighlight>

演算子のオーバーロードがなかった[[C言語]]では非常に面倒な「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合される」などの便利な使い方が出来る。

しかしながら「a + b」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。
<syntaxhighlight lang="perl">
// どうみても足し算である。
a + b;

// 常識的に考えれば 以下のような足し算が期待される。
func(a,b){
return a + b;
}

// しかし第三者により以下のように演算子のオーバーロードされている可能性もある。
func(a,b){
return a - b;
}

</syntaxhighlight>

ある程度の規模のプロジェクトになると「第三者が書いた[[ライブラリ]]中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥る。そして一度でも経験すると、あのライブラリは悪のカリスマ「ジョーカー」が仕掛けた罠かもしれないという人間不信に陥り、現場は殺伐とした空気となる。例外なく[[デスマーチ]]まっしぐらである。

==関連項目==

*[[Bjarne Stroustrup インタビュー]]
*[[中級者病]]
*[[算術IF文]]
*[[正格評価]]
*[[ユークリッドの互除法]]
匿名利用者

案内メニュー