如果我有一些类(class)基础,并从中得出,在基础内,我有 friend 功能
friend int operator!=(const Basis&, const Basis&)
在派生类内部我没有这样的功能
所以我的问题是,如果我的主体内部
If( derived1 != derived2 ) ...
为什么行得通?我没有任何构造函数可用于!=预先感谢
如果我写
如果(派生!=基础)会起作用吗?
最佳答案
编译器将它们作为Basis
类的对象进行比较。由于您始终可以从派生类隐式转换为基类,因此编译器可以将它们传递给Basis
的operator !=
重载。当然,此比较只能使用在Basis
中声明的字段,因此,如果您希望通过使用Derived
的成员来使比较更具体,则必须定义一个单独的operator !=
重载。
友谊声明与调用operator !=
无关;它所做的只是允许operator !=
访问Basis
中声明的私有(private)成员。