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++保護変数を宣言する方法はありますか?
コンパイラは、クラスのインスタンスにどのくらいのスペースを割り当てるかをどのように知っていますか?どのようにコンパイラがfoo
を割り当てたときvar
のためのスペースを割り当てることを知っているだろう?
A foo;
protected int A::var;
A bar;
を考えてみましょうか第1および第2の線は異なる翻訳単位であってもよい。
だから、それは意味をなさないのでできません。
簡単な言葉では、それは不可能です。
複雑な言葉では、標準ではキーワードとアクセス指定子をクラス定義内でのみ使用できるため、これは不可能です。
(他の人が言ってきたように)あなたが望む正確何を行う方法はありませんが、あなたは自分のクラスのユーザーにprotected
/private
メンバーを明らかにしたくない場合は、この周囲に「ハッキング」があります。 PrivateBase
およびPublicBase
クラスを作成してから、以前の2つのクラスの多重継承または合成を使用する3番目のクラスを作成できます。通常、これはヘッダーファイルを配布したいがプライベートメンバーをすべて公開したくないために行われます。
Here is an exampleなどです。私はScott Meyersも彼の本の1つの例を持っていると信じています。それはずっと多くの作業であり、あなたの側でメンテナンスをより複雑にするので、それを覚えておいてください。
+1優れた点。 – greg