0

我有以下方案:

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是私有的。有没有办法在不添加虚拟公共功能的情况下将其公开?

4

3 回答 3

2

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

您的代码的问题在于它Interface有一个私有析构函数,使得派生类无法销毁它们的基类子对象。~Interface()应该受到保护或公开。

于 2014-12-23T14:23:56.217 回答
0

不,那里没有。

此外,即使是一个虚拟的公共功能也需要foo在基础是protected,而不是private

我会重新审视你的设计。如果该功能旨在公开,那为什么不公开public

于 2014-12-23T13:57:06.277 回答
-1

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

于 2014-12-23T14:17:22.943 回答