友元函数是继承的吗?为什么基础 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 class
是 base class
的一种类型,所以友元函数工作正常。但请注意,这里的 derived class
实例是 sliced
,并且只有 base class
的信息可用。
如果您尝试访问 derived class
的受限成员,friend function
将报告错误。例如
int friendFuncReturn(baseClass &obj) { return ((derivedClass)obj).derivedInt; }
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 class
是 base class
的一种类型,所以友元函数工作正常。但请注意,这里的 derived class
实例是 sliced
,并且只有 base class
的信息可用。
如果您尝试访问 derived class
的受限成员,friend function
将报告错误。例如
int friendFuncReturn(baseClass &obj) { return ((derivedClass)obj).derivedInt; }