我们都同意公共变量不利于封装以及所有这些.但是,我注意到有很多代码可以执行此类操作:
class foo {
private:
int integer_;
string someString_;
// other variables
public:
int& integer() { return integer_; }
string& someString() { return someString_; }
// other "functions"
}
int main() {
foo f;
f.integer() = 10;
f.someString() = "something";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到这在许多地方被使用,我不明白为什么.基本上它返回对数据的引用,从而将其直接暴露给外部.所以封装并没有真正实现,不是从任何角度来看.
为什么这个常用?
问这个问题,因为我觉得稍后在派生类中需要我的基础的成员变量.是否有保护它们的缺点?
编辑:编辑以更好地表明我的意图.
编辑:@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;
};
Run Code Online (Sandbox Code Playgroud)