据说 - “朋友不是继承的” 这意味着
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将不具有朋友功能
class base * b =& d; //因此b也没有成员函数
因此,对f(b)的调用应该是错误的。
所以说的是正确的: -
友谊不是继承的
或友谊是继承的,但不能在派生类中使用
答案 0 :(得分:2)
友谊不是继承的
即使在你的例子中也是如此。对f(b)的调用不应该是错误,因为Derived
对象被转换为Base&
类型。
函数f
只能访问Base
类的私有和受保护部分,但只能访问Derived
类的公共部分。