友谊被继承??奇怪

friendship getting inherited ?? strange

本文关键字:奇怪 继承 友谊      更新时间:2023-10-16

正如人们所说 - ">朋友不是继承的" .
这意味着

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(在这里应该是错误的。

那么正确的说法是正确的:-
友谊不是遗传
的或者友谊是继承的,但不能在派生类中使用

友谊不是遗传

即使在您的示例中也是如此。对 f(b( 的调用不应该是那里的错误,因为Derived对象被转换为Base&类型。

函数f只能访问 Base 类的私有部分和受保护部分,而只能访问 Derived 类的公共部分。