ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月30日(土) 00:38

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 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


通報する
ページトップ
   
投稿記事Posted: 2006年1月29日(日) 02:07 
私の環境でも、オーバーライドした関数を呼び出す際に
オーバーロード解決エラーが発生しました。
問題の関数の引数はBytePtr型1つです。
環境はWinXP SP2、AB 4.20です。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年1月30日(月) 00:14 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
これはこれはまた便利になりました。まずはありがとうございます。

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


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[11人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean