[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)で実装してみよう。