友元函数可以继承吗?为什么基类 FRIEND 函数可以在派生类对象上工作?

4 c++ inheritance class friend friend-function

class baseClass {
public:
  friend int friendFuncReturn(baseClass &obj) { return obj.baseInt; }
  baseClass(int x) : baseInt(x) {}
private:
  int baseInt;
};

class derivedClass : public baseClass {
public:
  derivedClass(int x, int y) : baseClass(x), derivedInt(y) {}
private:
  int derivedInt;
};
Run Code Online (Sandbox Code Playgroud)

在函数中friend int friendFuncReturn(baseClass &obj) { return obj.baseInt; } 我不明白为什么基类的友元函数适用于派生类?不应传递派生类 obj。而不是基类 obj。t 被视为错误?我的问题是为什么当我将派生类对象传递给它时它会起作用?

cse*_*cse 5

友元函数可以继承吗?

不,友元函数不会被继承。

为什么基类函数可以作用于派生类对象?

因为友元函数仅使用可用的数据成员base class。不是 的数据成员derived class。由于derived class是 So 的一种类型base class,友元函数工作正常。但请注意,这里的derived class实例是sliced并且仅具有可用的信息base class。 friend function如果您尝试访问 的受限成员,将会报告错误derived class。例如

 int friendFuncReturn(baseClass &obj) { return ((derivedClass)obj).derivedInt; }
Run Code Online (Sandbox Code Playgroud)