变量“受保护”很容易被派生类恶意改变? 我应该在基类变量中使用“private”而不是“protected”吗?
答案 0 :(得分:10)
如果您担心'恶意'修改,那么即使将数据标记为private:
也无济于事。
C ++访问说明符仅对基本上遵守规则的代码有用。
将成员标记为private
会阻止您班级的普通用户弄乱他们。但是,即使是有bug的非恶意代码也可能破坏这些成员。超出,错误的指针算法或不正确使用强制转换让C ++程序员导致这些问题。
答案 1 :(得分:2)
在C ++中无法阻止“恶意”访问,因为您总能以某种方式绕过编译器限制。如果您担心“意外”更改,请继续将其设为私有。
答案 2 :(得分:1)
好吧,受保护的成员会继承。如果您不希望这种情况发生,请将它们设为私有。
答案 3 :(得分:0)
答案 4 :(得分:0)
一般来说,如果您正在考虑声明一个私有变量,那么您应该退后一步,问问自己为什么甚至在头文件中发布声明?
而不是在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 ONLY :
struct foo_privates {
int i;
double d;
char str[128];
};
当然,foo的构造函数必须分配单独的对象,析构函数必须销毁它。