演算子をオーバーロードして、代替動作やさまざまなオペランド タイプに対する動作を提供できます。
演算子をオーバーロードして、代替動作やさまざまなオペランド タイプに対する動作を提供できます。例えば、Timer タイプを時間と分で表現する場合、2 つの Timer を追加する 1 つの + (プラス) 演算子と、分を Timer タイプに追加するもう 1 つの + (プラス) 演算子を次のように定義できます。
operator-id + . 01 sumMins binary-long. 01 sumHour binary-long. 01 m binary-long value 0. 01 h binary-long value 0. procedure division using value a as type Timer b as type Timer returning c as type Timer. set sumHour to a::pHour + b::pHour set sumMins to a::pMins + b::pMins if sumMins >= 60 divide sumMins by 60 giving h remainder m set c to new Timer(sumHour + h, m) else set c to new Timer(sumHour sumMins) end-if end operator. operator-id + . 01 sumMins binary-long. 01 m binary-long value 0. 01 h binary-long value 0. procedure division using value a as type Timer b as binary-long returning c as type Timer. set sumMins to a::pMins + b divide sumMins by 60 giving h remainder m set c to new Timer(a::pHour + h , m) end operator.
オーバーロードされた演算子を使用するには、次のような文を使用します。
program-id OpConversionExtension. 01 timer1 type Timer value new Timer(1 45). 01 timer2 type Timer value new Timer(2 45). 01 timer3 type Timer value new Timer. 01 myMins binary-long value 30. procedure division. *> オーバーロードされた演算子: set timer3 to timer1 + myMins *> プラス演算子は、binary-long を Timer に追加する display timer3::pHour & ":" & timer3::pMins *> 2:15 を表示 set timer3 to timer1 + timer2 *> プラス演算子は、2 つの Timer タイプを追加する display timer3::pHour & ":" & timer3::pMins *> 4:30 を表示 end program.
適切な演算子は、機能するオペランドのタイプに従って実行されます。署名 (手続き部の USING 句) が一致する演算子が実行されます。2 つの Timer タイプを追加する場合、2 つの Timer タイプを追加する署名の演算子が実行されます。
演算子の署名では、引数が定義された順序で渡される必要があることに注意してください。上記の例では、次のように最初が Timer タイプ、次が binary-long になる必要があります。
set timer3 to timer1 + myMins ... operator-id + . procedure division using value a as type Timer b as binary-long returning c as type Timer.
引数を逆の順序で渡すようにするには、オペランドが演算子の署名の逆の順序になる別の演算子を宣言する必要があります。次に例を示します。
set timer3 to myMins + timer1 ... operator-id + . procedure division using value a as binary-long b as type Timer returning c as type Timer.
オーバーロードする演算子を使用するには、オーバーロードされた演算子が範囲内にある必要があります。
加減乗除の算術演算子はすべてオーバーロードできますが、それらに相当する動詞はオーバーロードできません。例えば、次の文の ADD はオーバーロードできません。
add a to b giving c