如果我有一些类(class)基础,并从中得出,在基础内,我有 friend 功能

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

在派生类内部我没有这样的功能
所以我的问题是,如果我的主体内部
If( derived1 != derived2 ) ...

为什么行得通?我没有任何构造函数可用于!=预先感谢
如果我写
如果(派生!=基础)会起作用吗?

最佳答案

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

友谊声明与调用operator !=无关;它所做的只是允许operator !=访问Basis中声明的私有(private)成员。

08-06 01:06