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。被视为错误? 我的问题是,当我将派生类对象传递给它时,它的工作原理是什么?
答案 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; }