列挙型のオーバーロードについて

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 列挙型のオーバーロードについて

by イグトランス » 2006年1月30日(月) 00:14

これはこれはまた便利になりました。まずはありがとうございます。

さて使う前に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型の変数をキャストなしには渡せないと言う状況になり不便だという状況が思い浮かびます。

オーバーロード解決エラーは

by k2 » 2006年1月29日(日) 02:07

私の環境でも、オーバーライドした関数を呼び出す際に
オーバーロード解決エラーが発生しました。
問題の関数の引数はBytePtr型1つです。
環境はWinXP SP2、AB 4.20です。

列挙型のオーバーロードについて

by k.kiyo » 2006年1月28日(土) 21:38

下記のプログラムのように、
列挙型を引数にして関数を呼ぶと、
Long型のfunc関数が呼ばれます。

コード: 全て選択

enum eTEST
    eTEST_AAA = 0
    eTEST_BBB
endenum

sub func(e as eTEST)
    print "func enum"
endsub

sub func(n as long)
    print "func long"
endsub

func(0)         '"func long"
func(eTEST_AAA) '"func long"
この事と関係あるのか分かりませんが、
列挙型をとるメソッドをオーバーライドして、
そのメソッドを呼ぼうとすると
「オーバーロードを解決できません」
というエラーになります。

コード: 全て選択

class CTestBase
public
    sub func(e as eTEST)
        print "CTestBase::func enum"
    endsub
endclass

class CTest
    inherits CTestBase
public
    sub func(e as eTEST)
        print "CTest::func enum"
    endsub
endclass

dim obj as CTest
obj.func(eTEST_AAA)'オーバーロードを解決できません
AB4.20

ページトップ