0

クラスで変数を定義すると、このクラスのインスタンスを宣言するたびに、特定のインスタンスのその変数の新しいコピーがメモリ内に作成されます。私はこれを理解していますが、これはすべてのメンバー変数がプライベートの場合に当てはまりますか? 例えば:

class A {
    int a, b, c;
};

A a;

新しいインスタンスを作成すると、これらのプライベート変数aはクラス外では使用できませんが、まだ割り当てられていますか?

4

2 に答える 2

2

プライベート変数は「クラス外からは使用できない」というあなたの仮定は正しくありません。メンバーを宣言するということは、クラスの外部から名前で直接参照privateできないことを意味するだけです(もちろん、クラスの友達を除く)。「使用できない」というのは、はるかに強力な主張ですが、たまたま真実ではありません。

「外部の世界」がそのプライベート メンバーにアクセスする別の方法を何らかの方法で取得した場合、制限なしでアクセスできます。たとえば、クラスは、プライベート メンバーにバインドされた参照 (またはポインター) を返すパブリック アクセス メンバー関数を実装する場合があります。これにより、その特定のメンバーが外部から間接的にアクセスできるようになります。

実際には、メンバー名のレベルで機能する純粋に概念的なコンパイル時のアクセス制限を除けば、クラスのパブリック メンバーとプライベート メンバーの間にまったく違いはありません。これは、コンパイラ レベルで実装された非常に薄い保護層です。その背後には物理的なものは何もありません。つまり、保護レベルに関係なく、クラスのデータ メンバー間に物理的な違いはありません。

于 2012-11-22T21:24:20.027 に答える