正所谓——“朋友不遗传”。
代表着
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);
}
这段代码怎么可能是正确的?因为
class derived d;// d 不会有友元函数
类基 *b=&d; //结果b也没有成员函数
所以在这里调用 f(b) 应该是错误的。
所以说什么是正确的:-
友谊不是继承的
或友谊是继承的,但不能在派生类中使用