有没有办法从它的类之外声明一个受C ++保护的变量?

时间:2012-05-05 15:17:46

标签: c++ class variables protected

class A {
public:
    A();
    int get();
    void set();
};

protected int A::var;
似乎它会起作用。但是,它“期望受保护之前的不合格身份”。这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:6)

简单来说,不,这是不可能的。

复杂的话,这是不可能的,因为标准允许关键字和访问说明符protected仅在类定义中使用。

答案 1 :(得分:6)

编译器如何知道为类的实例分配多少空间?考虑

A foo;
protected int A::var;
A bar;

编译器在分配var时如何知道为foo分配空间?第一行和第二行甚至可以在不同的翻译单元中。

所以,不,这是不可能的,因为它没有意义。

答案 2 :(得分:0)

没有办法完全你想要的东西(正如其他人所说的那样),但是如果你不想透露protected / {那么就会有“黑客攻击” {1}}您班级用户的成员。您可以创建一个privatePrivateBase类,然后创建一个使用多个继承或前两个类的组合的第三个类。通常,这样做是因为您希望分发头文件,但不想透露所有私有成员。

Here is an example这样的。我相信Scott Meyers在他的一本书中也有一个例子。这是一项更多的工作,并使你的维护更复杂,所以请记住这一点。