朋友的功能是继承的吗?为什么基类FRIEND函数会对派生类对象起作用?

时间:2017-11-24 09:04:03

标签: c++ class inheritance 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;
};
函数friend int friendFuncReturn(baseClass &obj) { return obj.baseInt; }中的

我不明白为什么基类的friend函数适用于派生类? 不应该传递派生类obj。而不是基类obj。被视为错误? 我的问题是,当我将派生类对象传递给它时,它的工作原理是什么?

2 个答案:

答案 0 :(得分:2)

即可。你不能在C ++中继承友元函数。它是两个班级之间严格的一对一关系。

C ++标准,第11.4 / 8节

  

友谊既不是遗传也不是传递。

答案 1 :(得分:1)

  

是否继承了朋友的功能?

不,朋友的功能不会被继承。

  

为什么基类函数可以在派生类对象上运行?

因为友方功能仅使用base class中提供的数据成员。不是derived class的数据成员。由于derived class是一种base class所以,朋友功能正常。但请注意,此处derived class实例为sliced且信息仅适用于base class。 如果您尝试访问friend function的受限成员,derived class将报告错误。例如

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