2010-07-23 63 views
2

如果我有一些阶级基础,并从中它派生的,里面基础上,我有朋友功能派生类可以使用基类的朋友函数吗?

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

里面派生类中,我没有这样的功能 所以我的问题是,如果我有在我的主要

If(derived1 != derived2) ... 

它为什么有效?我没有任何构造函数用于铸造!=预先感谢 如果我写 if(derived!= basis)它会起作用吗?

回答

2

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

友谊宣言与operator !=无关;它只允许operator !=访问在Basis中声明的私人成员。

+0

如果我写if(derived!= basis)它会起作用吗? – Chan 2010-07-23 14:26:23

+0

@Chan,是的,任何'Basis'或派生类类型的对象组合都可以与你的'operator!='重载进行比较,并且需要注意的是,重载只使用从'Basis'继承的部分。这是基本OO'是'继承关系的结果。 (http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) – 2010-07-23 14:31:57

+0

非常感谢 – Chan 2010-07-23 14:38:48

0

这听起来像你的朋友功能只比较DerivedBasis部分。所以,它在时尚之后起作用,但忽略了Derived中的任何数据。

0

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

相关问题