“受保护”的变量容易被派生类恶意更改?我应该在基类变量中使用“private”而不是“protected”吗?
ASAFE
问问题
383 次
5 回答
10
如果您担心“恶意”修改,那么即使将数据标记为private:
也无济于事。
C++ 访问说明符仅对本质上按规则运行的代码有用。
将成员标记为private
将防止您班级的普通用户与他们混淆。然而,即使是有错误的非恶意代码也可能破坏这些成员。溢出、错误的指针算术或不正确使用强制类型转换让 C++ 程序员导致这些问题。
于 2009-01-30T19:31:01.623 回答
2
在 C++ 中无法阻止“恶意”访问,因为您总能以某种方式绕过编译器限制。如果您担心“意外”更改,请继续将其设为私有。
于 2009-01-30T19:31:48.237 回答
1
好吧,受保护的成员确实会被继承。如果您不希望这种情况发生,请将它们设为private。
于 2009-01-30T19:31:19.827 回答
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 的构造函数必须分配单独的对象,而析构函数必须销毁它。
于 2009-01-30T20:36:42.487 回答
0
看看: http: //www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.5
你可能想要私人的。
于 2009-01-30T19:32:13.507 回答