よく言われるように「友達は遺伝しない」。
だということだ
class c
{public:
friend void i_am_friend();
};
class d:public c
{public:
//
};
ここで void i_am_friend()はクラス d で継承されません。より技術的な用語で (私はこのように考えています。)
クラス d のオブジェクトは、基本クラスのフレンドであるため、 void i_am_friend()に割り当てられるメモリはありません。
次に、質問番号を検討してください。このページの14.3 http://www.parashift.com/c++-faq/friends.html
class Base {
public:
friend void f(Base& b);
...
protected:
virtual void do_f();
...
};
inline void f(Base& b)
{
b.do_f();
}
class Derived : public Base {
public:
...
protected:
virtual void do_f(); // "Override" the behavior of f(Base& b)
...
};
void userCode(Base& b)
{
f(b);
}
このコードはどのように正しいのでしょうか?? なぜなら
クラス派生 d;// d はフレンド関数を持たない
クラス ベース *b=&d; //結果として b もメンバー関数を持たない
したがって、ここでは f(b) の呼び出しはエラーになるはずです。
つまり、正しいことは次のとおりです:-
友情は継承
されないか、友情は継承されますが、派生クラスでは使用できません