C++ 中的继承和友元关系

c++server side programmingprogramming

在 C++ 中,友元关系不被继承。这意味着,如果一个父类拥有一些友元函数,那么子类将无法获得这些友元函数。

在此示例中,由于 display() 函数是 MyBaseClass 的友元函数,但不是 MyDerivedClass 的友元函数,因此会产生错误。display() 函数可以访问 MyBaseClass 的私有成员。

示例

#include <iostream>
using namespace std;
class MyBaseClass {
   protected:
      int x;
   public:
      MyBaseClass() {
           x = 20;
      }
      friend void display();
};
class MyDerivedClass : public MyBaseClass {
   private:
      int y;
   public:
      MyDerivedClass() {
         x = 40;
      }
};
void display() {
   MyDerivedClass derived;
   cout << "基类的私有成员的值为:" <<derived.x << endl;
   cout << "派生类的私有成员的值为:" << derived.y << endl;
}
main() {
   display();
}

输出

[Error] 'int MyDerivedClass::y' is private
[Error] within this context

相关文章