ぼく用あれこれまとめ
インターフェイスクラス
最終更新:
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
- 実装とインタフェイスを分けることがマルチプラットフォームにつながる