派生类可以使用基类的友元函数吗?
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】:
听起来你的朋友功能只比较Derived
的Basis
部分。因此,它以某种方式工作,但忽略了Derived
中的任何数据。
【讨论】:
【参考方案3】:因为您的 Derived 类继承了您的 Basis 类所具有的所有内容,在本例中是 != 的运算符重载,因此您的 Derived 对象(派生 1 和派生 2)也已定义它们。
【讨论】:
以上是关于派生类可以使用基类的友元函数吗?的主要内容,如果未能解决你的问题,请参考以下文章