0

“受保护”的变量容易被派生类恶意更改?我应该在基类变量中使用“private”而不是“protected”吗?

4

5 回答 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 回答