2012-05-05 6 views

答えて

6

コンパイラは、クラスのインスタンスにどのくらいのスペースを割り当てるかをどのように知っていますか?どのようにコンパイラがfooを割り当てたときvarのためのスペースを割り当てることを知っているだろう?

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

を考えてみましょうか第1および第2の線は異なる翻訳単位であってもよい。

だから、それは意味をなさないのでできません。

+0

+1優れた点。 – greg

6

簡単な言葉では、それは不可能です。

複雑な言葉では、標準ではキーワードとアクセス指定子をクラス定義内でのみ使用できるため、これは不可能です。

0

(他の人が言ってきたように)あなたが望む正確何を行う方法はありませんが、あなたは自分のクラスのユーザーにprotected/privateメンバーを明らかにしたくない場合は、この周囲に「ハッキング」があります。 PrivateBaseおよびPublicBaseクラスを作成してから、以前の2つのクラスの多重継承または合成を使用する3番目のクラスを作成できます。通常、これはヘッダーファイルを配布したいがプライベートメンバーをすべて公開したくないために行われます。

Here is an exampleなどです。私はScott Meyersも彼の本の1つの例を持っていると信じています。それはずっと多くの作業であり、あなたの側でメンテナンスをより複雑にするので、それを覚えておいてください。

関連する問題