【问题标题】:Can derived class use friend function of the basis class?派生类可以使用基类的友元函数吗?
【发布时间】:2010-07-23 14:15:17
【问题描述】:

如果我有一些类基础,并从它派生,在基础里面我有朋友函数

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

在派生类中我没有这样的功能 所以我的问题是我是否在我的主目录中

If( derived1 != derived2 ) ...

为什么有效?我没有任何用于强制转换的构造函数!= 在此先感谢 如果我写 如果(派生!=基础)会起作用吗?

【问题讨论】:

    标签: c++ inheritance friend


    【解决方案1】:

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

    在拨打operator !=时,友谊声明无关紧要;它所做的只是允许operator != 访问在Basis 中声明的私有成员。

    【讨论】:

    【解决方案2】:

    听起来你的朋友功能只比较DerivedBasis 部分。因此,它以某种方式工作,但忽略了Derived 中的任何数据。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多