Operator ステートメント とは?

解決


雪見大福  2008-01-09 21:16:49  No: 144248  IP: 192.*.*.*

以下のコードにおいて、
Module Module1
    Structure Seiseki
        Dim kokugo, sugaku, eigo As Integer
        Sub SetSeiseki(ByVal kamoku1 As Integer, ByVal kamoku2 As Integer, ByVal kamoku3 As Integer)
            kokugo = kamoku1
            sugaku = kamoku2
            eigo = kamoku3
        End Sub
        Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seiseki
            Dim z As Seiseki
            z.kokugo = x.kokugo + y.kokugo
            z.sugaku = x.sugaku + x.sugaku
            z.eigo = x.eigo + y.eigo
            Return z
        End Operator

    End Structure
    Sub Main()
        Dim a, b, c, gokei As Seiseki
        a.SetSeiseki(70, 90, 80)
        b.SetSeiseki(100, 77, 50)
        c.SetSeiseki(92, 88, 95)
        gokei = a + b + c

        Console.WriteLine("学生aの国語={0,4}  数学={1,4}  英語={2,4}", a.kokugo, a.sugaku, a.eigo)
        Console.WriteLine("学生bの国語={0,4}  数学={1,4}  英語={2,4}", b.kokugo, b.sugaku, b.eigo)
        Console.WriteLine("学生cの国語={0,4}  数学={1,4}  英語={2,4}", c.kokugo, c.sugaku, c.eigo)

        Console.WriteLine("3人の学生の国語の合計={0,4}", gokei.kokugo)
        Console.WriteLine("3人の学生の数学の合計={0,4}", gokei.sugaku)
        Console.WriteLine("3人の学生の英語の合計={0,4}", gokei.eigo)

        Console.ReadLine()
    End Sub
  End Module

gokei = a + b + cのあとに
Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seisekiに
どうして移動していくのよくわかりません。
Functionステートメント、subステートメントのときは、プロシージャー名ですぐに分かるのですが・・・。
お忙しいとは思いますが、何卒宜しくご指導宜しくお願いします。

編集 削除
大吉末吉  2008-01-09 21:29:46  No: 144249  IP: 192.*.*.*

> Functionステートメント、subステートメントのときは、プロシージャー名ですぐに分かるのですが・・・。

> Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seiseki

オペレータ名が「+」となってますから、

> gokei = a + b + c
で、「Seiseki型」に対して、オペレータ「+」が実行されたときに、移動しるのでは・・・

編集 削除
YuO  2008-01-09 22:03:52  No: 144250  IP: 192.*.*.*

http://msdn2.microsoft.com/ja-jp/library/hddt295a.aspx
これですね。

特定のクラスを含む演算子の動作を変更するためのものです。
たとえば,複素数型
Public Structure Complex
' 実装は省略
End Structure
を作ったとして,

Dim c1 As New Complex(1.0, 0.0), c2 As New Complex(0.0, 1.0), c3 As New Complex(1.0, 1.0)
を用意したとして,
Dim c4 As Complex = Complex.Divide(Complex.Add(c1, c2), c3)

Dim c4 As Complex = c1.Add(c2).Divide(c3)
と,
Dim c4 As Complex = (c1 + c2) / c3
を見比べると,後者の方が分かり易いですよね。

この時の,+や/の動作を決定するのが演算子プロシージャです。
あまり使わないものですが,数学的なライブラリではあると便利です。
# 今回の例ではちょっと疑問。普通,成績同士の和に意味はないので。

編集 削除
雪見大福  2008-01-12 14:45:32  No: 144251  IP: 192.*.*.*

ご教授ありがとうございました。大変わかり易かったです。

編集 削除