這裏是我有我的基類的工作方式:虛擬功能是否必須公開?
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);
};
他們中的一些像這樣工作。有一個常規的不可覆蓋的函數,如果其不爲NULL,則調用虛函數和函數指針。
當我創建派生類或者它們必須是公共的時,我的虛擬函數是否能夠再次進入私有範圍?
我想避免它們因我的設計而被公開。 謝謝
如果您願意,您可以創建一個虛擬功能。而且,這看起來像是一個不必要的複雜設計。你想用它來完成什麼? – JoshD 2010-10-08 01:21:10
好,它是因爲我想事件處理程序,因此函數指針,用戶將能夠通過addHandler操作功能 – jmasterx 2010-10-08 01:24:41
@JoshD的想法設置回調是例如: 常規的非重寫漆調用虛擬顏料,然後調用事件處理程序(函數指針(如果已設置)) – jmasterx 2010-10-08 01:25:52