class A {
public:
A();
int get();
void set();
};
protected int A::var;
好像它會工作。然而,它「預計在受保護之前有一個不合格id」。什麼是正確的方法來做到這一點?有沒有辦法從它的類之外聲明一個C++保護變量?
class A {
public:
A();
int get();
void set();
};
protected int A::var;
好像它會工作。然而,它「預計在受保護之前有一個不合格id」。什麼是正確的方法來做到這一點?有沒有辦法從它的類之外聲明一個C++保護變量?
編譯器如何知道需要爲該類的實例分配多少空間?考慮
A foo;
protected int A::var;
A bar;
如何將編譯器知道爲var
分配空間時,它分配foo
?第一行和第二行甚至可以用不同的翻譯單位。
所以,不,這是不可能的,因爲它沒有意義。
簡而言之,不,這是不可能的。
這是不可能的,因爲標準允許關鍵字和訪問說明符protected
僅在類定義中使用。
有沒有辦法做到正是你想要的東西(如其他人所說的),但也有「黑客」解決這個,如果你只是不想透露protected
/private
成員類的用戶。您可以創建PrivateBase
和PublicBase
類,然後創建使用多個繼承或組合前兩個類的第三個類。通常情況下,這是因爲你想分發一個頭文件,但你不想透露你所有的私有成員。
Here is an example等等。我相信Scott Meyers在他的一本書中也有一個例子。這需要更多的工作,並且使維護更加複雜,所以請牢記這一點。
+1爲優秀點。 – greg