如果我有一些类基础,并从它派生,在基础内部我有朋友函数
friend int operator!=(const Basis&, const Basis&)
在派生类内部我没有这样的功能所以我的问题是我的主要内部是否有
If( derived1 != derived2 ) ...
为什么它起作用?我没有任何用于强制转换的构造函数!= 提前感谢如果我写 if(派生!= 基础)它会工作吗?
如果我有一些类基础,并从它派生,在基础内部我有朋友函数
friend int operator!=(const Basis&, const Basis&)
在派生类内部我没有这样的功能所以我的问题是我的主要内部是否有
If( derived1 != derived2 ) ...
为什么它起作用?我没有任何用于强制转换的构造函数!= 提前感谢如果我写 if(派生!= 基础)它会工作吗?
编译器将它们作为 class 的对象进行比较Basis
。由于您始终可以从派生类隐式转换为基类,因此编译器能够将它们传递Basis
给operator !=
. 当然,这种比较只能使用在 中声明的字段Basis
,因此如果您希望通过使用 的成员来进行更具体的比较,Derived
则必须定义一个单独的operator !=
重载。
友谊声明与通话无关operator !=
;它所做的只是允许operator !=
访问在Basis
.
听起来您的朋友功能仅比较Basis
. Derived
因此,它以某种方式工作,但忽略Derived
.
因为您的 Derived 类继承了您的 Basis 类的所有内容,在这种情况下是 != 的运算符重载,所以您的 Derived 对象(derived1 和 derived2)也定义了它们。