2008-02-20

継承についての小考察

継承でスペースを犠牲にして利便性を向上するケースに出会った.

typedef void (*TidyItemProc)(void *item);

struct List {
    /* ... */
    void MakeEmpty(TidyItemProc proc);
};

struct XList : public List {
    void MakeEmpty() { List::MakeEmpty(this->tidy_item_proc); }
    TidyItemProc tidy_item_proc;
};

でも実はこれは継承を用いるべきではない.XList is-a List になっていない.これは本当は集約を用いるべきケース.

struct XList {
    List list;
    void MakeEmpty() { list.MakeEmpty(this->tidy_item_proc); }
    TidyItemProc tidy_item_proc;
};

しかし集約でメソッドをリダイレクトするのは面倒だ.

0 件のコメント:

コメントを投稿