提出这个问题,因为我觉得我的基础的成员变量将在派生类后面需要.有没有保护他们的缺点?
编辑:编辑更好地显示我的意图.
编辑:@sbi:这也是错的吗?
此类将用于其他类中的错误记录和检索.最好从它衍生或使用它的对象 – 我不知道.但是我认为getter和setter方法是这个类是什么.
class ErrorLogger { public: //Making this function virtual is optional virtual void SetError(const char*,...); const char* GetError() const; protected: char* z_ErrorBuf; };
解决方法
封装是OO的主要特征之一.将数据封装在类中意味着类的用户不能破坏类的数据不变量,因为类的状态只能通过其成员函数进行操作.
如果允许派生类访问其基类的数据,则派生类需要注意不要使基类的数据的不变量无效.这会将封装从窗口中抛出,只是错误. (所以做getters and setters,BTW.)
多年来,我发现自己受到越来越少的保护,即使是成员的功能.如果一个类完全实现一个简单的概念,那么它的所有状态都应该通过它的公共接口来操纵.如果派生类需要“后门”潜入,那么我通常会质疑我的设计. (这不是说我从来没有使用过保护,我只是发现我需要的越来越少)