ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

friendクラスは継承されない

あるクラスのフレンドクラスを継承しても、そのフレンドの機能は継承されない。

class CTest
{
    friend class CFriend;
private:
    int value;
};

class CFriend
{
protected:
    CTest test;
    void func()
    {
        int a = test.value;
    }
};

class Child : public CFriend
{
    void func()
    {
        int a = test.value; // コンパイルエラー
    }
};

今まであまりフレンドクラスを使う機会がなかったので、今日、コードを書いていて継承されないことを初めて知った。
確かに継承できてしまえば、まったくprivateにしている意味がない。
いや、そもそもフレンドクラスを使おうとしている時点で設計が間違っているだろう。フレンドクラスを使わなくて済むようにきちんと設計すべきだ。