[Mona] 多重継承

ちょっと設計に迷った。

class Directory : public FileSystemEntry

 FileSystemEntryに加えて、親ディレクトリ・子ディレクトリリストを持っていたりする

class File : public FileSystemEntry

ファイルのReadのメソッド等を持つ


ISO9660ファイルシステムディレクトリ・ファイルは以下のような感じで継承する

class ISO9660Directory : public Directory
class ISO9660File : public File

ISO9660ファイルシステムを使用するファイルサーバーはISO9660FileをFileとして扱う。(ファイルシステムを区別しない)


さてISO9660DirectoryとISO9660Fileは共通のデータを持たせたい。
たとえばextentとか。


このメンバ変数を前提に処理する関数があるのでこの関数ではISO9660Directory, ISO9660Fileの両方を処理できないといけない。。

SetHoge(ISO9660File or ISO9660Directory)

2通りの方法を思いついた。



(1)多重継承
ISO9660Entryというクラス(インターフェース)を用意して

class ISO9660Directory : public Directory, public ISO9660Entry
class ISO9660File : public File, public ISO9660 Entry

のように多重継承する

SetHoge(ISO9660Entry)


(2)オーバーロード

SetHoge(ISO9660File)
SetHoge(ISO9660Directory)

のようにオーバーロードする


好みとしてはダントツ(1)の多重継承だが、多重継承は使わないほうがいいかなぁ。
とりあえず(1)で実装してみよう。