如果我有一些阶级基础,并从中它派生的,里面基础上,我有朋友功能派生类可以使用基类的朋友函数吗?
friend int operator!=(const Basis&, const Basis&)
里面派生类中,我没有这样的功能 所以我的问题是,如果我有在我的主要
If(derived1 != derived2) ...
它为什么有效?我没有任何构造函数用于铸造!=预先感谢 如果我写 if(derived!= basis)它会起作用吗?
如果我有一些阶级基础,并从中它派生的,里面基础上,我有朋友功能派生类可以使用基类的朋友函数吗?
friend int operator!=(const Basis&, const Basis&)
里面派生类中,我没有这样的功能 所以我的问题是,如果我有在我的主要
If(derived1 != derived2) ...
它为什么有效?我没有任何构造函数用于铸造!=预先感谢 如果我写 if(derived!= basis)它会起作用吗?
编译器将它们作为类Basis
的对象进行比较。由于您始终可以将派生类隐式转换为基类,因此编译器可以将它们传递给operator !=
的Basis
超载。当然,这种比较只能使用Basis
中声明的字段,所以如果您想通过使用Derived
的成员来比较更具体,则必须定义一个单独的operator !=
过载。
友谊宣言与operator !=
无关;它只允许operator !=
访问在Basis
中声明的私人成员。
这听起来像你的朋友功能只比较Derived
的Basis
部分。所以,它在时尚之后起作用,但忽略了Derived
中的任何数据。
因为您的派生类继承了您的Basis类所具有的所有内容,在本例中为!=的运算符重载,您的派生对象(derived1和derived2)也定义了它们。
如果我写if(derived!= basis)它会起作用吗? – Chan 2010-07-23 14:26:23
@Chan,是的,任何'Basis'或派生类类型的对象组合都可以与你的'operator!='重载进行比较,并且需要注意的是,重载只使用从'Basis'继承的部分。这是基本OO'是'继承关系的结果。 (http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) – 2010-07-23 14:31:57
非常感谢 – Chan 2010-07-23 14:38:48