派生类可以使用基类的友元函数吗?

Posted

技术标签:

【中文标题】派生类可以使用基类的友元函数吗?【英文标题】:Can derived class use friend function of the basis class? 【发布时间】:2010-07-23 14:15:17 【问题描述】:

如果我有一些类基础,并从它派生,在基础里面我有朋友函数

friend int operator!=(const Basis&, const Basis&)

在派生类中我没有这样的功能 所以我的问题是我是否在我的主目录中

If( derived1 != derived2 ) ...

为什么有效?我没有任何用于强制转换的构造函数!= 在此先感谢 如果我写 如果(派生!=基础)会起作用吗?

【问题讨论】:

【参考方案1】:

编译器将它们作为类Basis 的对象进行比较。由于您始终可以从派生类隐式转换为基类,因此编译器能够将它们传递给operator !=Basis 重载。当然,这种比较只能使用Basis中声明的字段,所以如果你想通过使用Derived的成员来进行更具体的比较,你必须定义一个单独的operator !=重载。

在拨打operator !=时,友谊声明无关紧要;它所做的只是允许operator != 访问在Basis 中声明的私有成员。

【讨论】:

@Chan,是的,Basis 类型的对象或派生类的任何组合都可以与您的 operator != 重载进行比较,但需要注意的是重载仅使用从 @987654333 继承的部分@。这是基本 OO 'is-a' 继承关系的结果。 (en.wikipedia.org/wiki/Inheritance_(object-oriented_programming))【参考方案2】:

听起来你的朋友功能只比较DerivedBasis 部分。因此,它以某种方式工作,但忽略了Derived 中的任何数据。

【讨论】:

【参考方案3】:

因为您的 Derived 类继承了您的 Basis 类所具有的所有内容,在本例中是 != 的运算符重载,因此您的 Derived 对象(派生 1 和派生 2)也已定义它们。

【讨论】:

以上是关于派生类可以使用基类的友元函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

类与类之间的友元关系可以继承吗? 友元函数是类的成员函数吗?

将派生类的构造函数声明为父类的友元

4月14日继承与多态

友元的友元类

C++:友元函数,派生类

友元相关