ぼく用あれこれまとめ
インターフェイスクラス
最終更新:
bokuyo
-
view
インターフェイスクラス
- 抽象クラスやインターフェイスとよばれたりするアレ。
class ISound { public: virtual void Init(const char* filename) = 0; virtual void Play() = 0; virtual void Stop() = 0; };
- 「virtual ~ =0」した関数を、純粋仮想関数って呼ぶらしい。
- 「純粋仮想関数」のことを「pure virtual function」
- 「=0」にすることで、定義をしなくて済む。宣言のみできるってこと。
- 本体のある純粋仮想関数というものがある。("Effective C++" 34項参照)
- interfaceキーワードってのがMSのC++/CLIにあるよ。明示的にインターフェイスクラスであることを示せる。「interface class ISound{};」
仮想デストラクタ
- 作っとこう。仮想デストラクタ
個人的になんでもかんでもインターフェイス作るべきじゃないと思う.
- 極力継承は避けるべき. void*型とか使う場面になって初めて使うくらいの勢いで.
- 仮想関数ってインライン化されにくいらしいお。
マルチプラットフォームを目指す
極力依存関係をなくすべし。
//EventMessage.hpp class EventMessage { }; //EventListener.hpp #include "EventMessage.hpp" class EventListener { EventMessage msg; }; //EventManager.hpp #include "EventMessage.hpp" #include "EventListener.hpp" class EventManager { private: EventMessage msg EventListener listener; };
- 上を下のようにすると依存関係を改善することができる
//EventMessage.hpp class EventMessage { }; //EventListener.hpp class EventMessage; class EventListener { EventMessage * msg; }; //EventManager.hpp class EventMessage; class EventListener; class EventManager { private: EventMessage * msg EventListener * listener; };
- ただしinline 化する必要があるなら下の方法では難しいかもしれない。
- pImpl イディオムを適宜使うとさらにgood
- 実装とインタフェイスを分けることがマルチプラットフォームにつながる