【发布时间】:2010-10-04 13:21:00
【问题描述】:
“受保护”的变量容易被派生类恶意更改? 我应该在基类变量中使用“private”而不是“protected”吗?
【问题讨论】:
“受保护”的变量容易被派生类恶意更改? 我应该在基类变量中使用“private”而不是“protected”吗?
【问题讨论】:
如果您担心“恶意”修改,那么即使将数据标记为 private: 也无济于事。
C++ 访问说明符仅对本质上遵守规则的代码有用。
将成员标记为private 将防止您班级的普通用户与他们混淆。然而,即使是有错误的非恶意代码也可能破坏这些成员。溢出、错误的指针算法或不当使用强制类型转换会让 C++ 程序员导致这些问题。
【讨论】:
嗯,protected 成员确实会被继承。如果您不希望这种情况发生,请将它们设为私有。
【讨论】:
在 C++ 中无法阻止“恶意”访问,因为您总能以某种方式绕过编译器限制。如果您担心“意外”更改,请继续将其设为私有。
【讨论】:
【讨论】:
一般来说,如果你打算声明一个私有变量,你应该退后一步,问问自己为什么还要在头文件中发布声明?
而不是在 foo.h 中向全世界公开您的成员变量:
class foo {
private:
int please_dont_modify_me;
double pretend_you_dont_see_this_declaration;
char dont_look_at_this [128];
public:
....
};
只使用一个不完整的私有类型,即没有定义:
class foo {
struct foo_privates & mine; // incomplete type
public:
...
};
然后在 foo.cpp 仅:
struct foo_privates {
int i;
double d;
char str[128];
};
当然,foo 的构造函数必须分配单独的对象,而析构函数必须销毁它。
【讨论】: