虚拟功能必须公开吗?

jma*_*erx 2 c++

这是我的基类工作方式:

class AguiWidgetBase
{
    //variables
    AguiDockingEnum dockingStyle;
    std::string text;
    AguiRectangle clientRectangle;
    AguiColor tintColor;
    AguiColor fontColor;
    std::map<int,int,CmpIntInt> children;

    //private methods
    void zeroMemory();
    virtual void onPaint();
    virtual void onAddChildControl(AguiWidgetBase *control);
    virtual void onTintColorChanged(AguiColor color);
    virtual void onDockingStyleChanged(AguiDockingEnum style);
    virtual void onTextChanged(std::string text);
    virtual void onThemeChanged(const AguiTheme &theme);
    void (*onPaintCallback)(AguiRectangle clientRect);
    void (*onTintColorChangedCallback)();
    void (*onDockingStyleChangedCallback)();
    void (*onTextChangedCallback)();
    void (*onThemeChangedCallback)();

protected:
    AguiWidgetBase *parentWidget;
public:
    AguiWidgetBase(void);
    ~AguiWidgetBase(void);

    void addChildControl(AguiWidgetBase *control);
    void removeChildControl(AguiWidgetBase *control);
    AguiWidgetBase* getParent();
    void paint();
    void setTintColor(AguiColor color);
    AguiColor getTintColor();
    void setDockingStyle(AguiDockingEnum style);
    AguiDockingEnum getDockingStyle();
    void setText(std::string text);
    std::string getText();
    void SetTheme( const AguiTheme &theme);
};
Run Code Online (Sandbox Code Playgroud)

其中一些像这样工作.有一个常规的不可覆盖的函数,如果它不是NULL,则调用虚函数和函数指针.

当我创建派生类或者它们必须公开时,我的虚函数能否再次进入私有范围?

由于我的设计,我想避免它们被公开.谢谢

wkl*_*wkl 9

虚函数可以有public,protectedprivate访问.

通过C++ FAQ对它们进行讨论.