C++相談室 part92
■ このスレッドは過去ログ倉庫に格納されています
0592デフォルトの名無しさん
2011/12/09(金) 12:19:36.98class IItem {
public:
virtual ID GetID() const = 0;
virtual ~IItem() {}
};
このような場合、分かりきっている実装は含めたほうがよくないでしょうか。
class IItem {
public:
virtual ID GetID() const { return id; }
virtual ~IItem() { id_.Release; }
protected:
IItem(ID id) : id_(id) {}
private:
ID id_;
};
また調べているうちにNVIパターンというものを知りました。
class IItem {
public:
ID GetID() const { return DoGetID(); }
virtual ~IItemA() {}
private:
virtual ID DoGetID() const = 0;
};
他言語ではインターフェイスは純粋な仮想関数を含むクラスという制限がありますが
その制限のない、というかインターフェイスという概念のないC++において、実装を含むクラスをインターフェイスと呼べるのでしょうか。
またインターフェイスという仕様に沿うために、実装を完全に派生クラスに移譲する設計をしているのか、
基底クラスに実装を含めたほうがいいと考えられるようなものでも、あえてそうしない理由があるのか、教えてください。
■ このスレッドは過去ログ倉庫に格納されています