>>807
// デバイスに対する抽象的な操作を定義する(インターフェース)
struct Device { virtual void read() = 0; };
// 実際の動作を実装
class HddDevice : public Device { void read() { /* HDDを操作するコード */ } };
class SdDevice : public Device { void read() { /* SDを操作するコード */ } };
class FlashDevice : public Device { void read() { /* Flashを操作するコード */ } };

// 外から与えられたデバイスに対して操作する。
// 実際のデバイスの種類は知る必要は無い。
class FAT {
public:
FAT(Device* dev) : dev_(dev) {}
void hage() { dev_->read(); }
private:
Device* dev_;
};


HddDevice dev;
FAT fat(&dev);

fat.hage();