class A {
public:
A();
int get();
void set();
};
protected int A::var;
似乎它会工作。但是,它“在受保护之前期望一个不合格的 id”。这样做的正确方法是什么?
简而言之,不,这是不可能的。
用复杂的话来说,这是不可能的,因为标准protected
只允许在类定义中使用关键字和访问说明符。
编译器如何知道要为类的实例分配多少空间?考虑
A foo;
protected int A::var;
A bar;
编译器如何知道在分配空间var
时分配空间foo
?第一行和第二行甚至可以在不同的翻译单元中。
所以,不,这是不可能的,因为它没有意义。
没有办法完全按照您的意愿去做(正如其他人所说),但是如果您只是不想向您班级的用户透露protected
/private
成员,那么围绕这个有“黑客”。您可以创建一个PrivateBase
和PublicBase
类,然后创建一个使用多重继承或组合前两个类的第三个类。通常,这样做是因为您想要分发头文件但又不想透露所有私人成员。
这是一个例子。我相信斯科特迈耶斯在他的一本书中也有一个例子。这是更多的工作,并使您的维护更加复杂,所以请记住这一点。