友元函数是继承的吗?为什么基础 class FRIEND 函数会作用于派生的 class 对象?

Are friend functions inherited? and why would a base class FRIEND function work on a derived class object?

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;
};

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

。你不能在 C++ 中继承友元函数。两个类.

之间是严格的一对一关系

C++ 标准,第 11.4/8 节

Friendship is neither inherited nor transitive.

Are friend functions inherited?

不,友元函数不被继承。

Why would a base class function work on a derived class object?

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

 int friendFuncReturn(baseClass &obj) { return ((derivedClass)obj).derivedInt; }