从派生类访问受保护的函数

Access protected function from derived class

本文关键字:函数 受保护 访问 派生      更新时间:2023-10-16

我有以下典型的场景,我想在子类中隐藏实现细节,并通过接口公开它:

template <typename Derived>
class Interface
{
public:
    void a()
    {
        static_cast<Derived*>(this)->_a();
    }
};
class Implementation : public Interface<Implementation>
{
protected:
    void _a()
    {
        /*
        ...
        */
    }
};

我想我理解为什么这不起作用,并且我知道将类Interface声明为Implementation的朋友可以解决这个问题,但是当涉及到更复杂的层次结构时,例如多个接口和各种级别的继承(就像我的实际情况一样),事情变得非常混乱。

我想避免在每个实现接口的类中声明friend class Interface<Implementation>

对于这个问题是否有另一种简洁的解决方案?

谢谢!

如何使用虚函数和多态性?

在子类中创建对象,并将其重新分配给接口类指针或引用。然后在接口类中创建一个纯虚函数,并在子类中定义它。