C++私有继承类的虚函数,在派生类声明中提升为公共函数



我有以下方案:

class Interface
{
    virtual ~Interface() { }
    virtual void foo() const = 0;
    virtual void bar() const = 0;
}
//Interface is derived privately mostly for preventing upcast outside
class Derived : private Interface
{
public:
    void foo() const;
private:
    void bar() const;
}

它不编译:foo是私有的。有没有办法在不添加虚拟公共函数的情况下将其公开?

语言而言,派生类中的公共成员函数重写基类中的私有成员函数是完全有效的。这样做是否是一个好主意是一个不同的问题。抽象基类没有公共成员函数当然没有意义。

代码的问题在于Interface具有私有析构函数,这使得派生类无法销毁其基类子对象。 ~Interface()要么是受保护的,要么是公开的。

不,没有。

此外,即使是虚拟的公共功能也要求基地中的fooprotected的,而不是private的。

我会重新审视你的设计。如果函数是公开的,那么为什么它不public

不允许更改继承成员的可访问性。如果允许,您将能够从类派生并使其私有或受保护成员公开,从而破坏封装。

最新更新