ぼく用あれこれまとめ

インターフェイスクラス

最終更新:

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
  • 実装とインタフェイスを分けることがマルチプラットフォームにつながる
記事メニュー
目安箱バナー