2011-12-20 12 views
2

私はそれが可能だとは思わなかったが、あなたが同じクラスの2つのインスタンスを持っている場合、あなたは他からプライベートメンバーにアクセスできますか?クラスインスタンス間でプライベートメンバー変数にアクセスできますか?

コピーコンストラクタでもこれを行うことができますか?実際には、これが許可されている理由はコピーコンストラクタですか?これはカプセル化を破ることはありませんか?

答えて

9

はい、クラス内のコードは、そのクラスのインスタンス内のプライベートデータにアクセスできます。

これは、カプセル化の単位をオブジェクトとして考えると、カプセル化を中断します。 C++はそれをそのようには考えていません。それはクラスの観点からカプセル化を考えています。

+0

class Foo { int a; // private! public: Foo (Foo const & rhs) : a(rhs.a) { } // rhs.a is accessible }; 

このアイデアはどのような燃料「工場」イディオムをもある:あなたはいつものコピーコンストラクタを書くことができる理由です

データを使用して行う必要があるすべてのアクセサが他のインスタンスからアクセスする場合はどうなりますか? – SirYakalot

+2

一般的に、いいえ、悪い習慣とはみなされません。アクセサが仮想でない限り、それらを使用する必要はありません。その場合、サブクラスがそれらに副作用を与える場合に使用する必要があります。 –

8

アクセス制限は、インスタンスではなくのクラスのプロパティです。それはこれを利用して書き込みしないように悪い習慣を考えられている

class Bar 
{ 
    Bar() { } // private?! 
public: 
    static Bar * create() { return new Bar(); } // Bar::Bar() is accessible 
}; 
関連する問題