これはこれはまた便利になりました。まずはありがとうございます。
さて使う前にABはオーバーロードの解決の仕様はどうだろうと調べるため唯一の実装に対して色々と試してみるわけです。
ヘルプにコンストラクタのオーバーロードができるとは書いてありませんし,
実際できませんができるようにしてほしいです。
コード: 全て選択
Class hoge
Public
Sub hoge(n As Long)
Print "hoge(n) n ="; n
End Sub
Sub hoge() '書くだけならエラーにならない
Print "hoge()"
End Sub
End Class
Dim obj1 As hoge(3)
’↓2つはエラー
'Dim obj2 As hoge()
'Dim obj3 As hoge
また次のように継承関係がある場合のfのオーバーロードと,
(オーバーロードとは関係がありませんが)基底クラスへの参照を受け取る引数に派生クラスのオブジェクトを渡せないのは問題ありだと思います。
(後者はまだ仮想関数によるポリモーフィズムができないので影響は小さいですけど)
コード: 全て選択
#strict
#prompt
Class Foo
End Class
Class Bar
Inherits Foo
End Class
Sub f(ByVal pFoo As *Foo)
Print "f(ByVal pFoo As *Foo)"
End Sub
Sub f(ByVal pBar As *Bar)
Print "f(ByVal pBar As *Bar)"
End Sub
Sub g(ByRef foo As Foo)
End Sub
Dim bar As Bar
f(VarPtr(bar))
g(bar)
今度は数値型同士のオーバーロードです。
コード: 全て選択
Sub f(ByVal n As Int64)
Print "f(ByVal n As Long)"
End Sub
Sub f(ByVal n As Double)
Print "f(ByVal n As Double)"
End Sub
Sub g(ByVal n As Char)
End Sub
Sub g(ByVal n As Long)
End Sub
f(0.5 As Single)
f(65536 As Word)
g(&hffff)
特にfのようなオーバーロードは,たとえばStr$関数をDoubule/Int64/QWordにオーバーロードして
64ビット整数を指数表記しない文字列へ変換するということを考えたときに,
Single型やWord型の変数をキャストなしには渡せないと言う状況になり不便だという状況が思い浮かびます。