(投稿)同類参照パラメータの私有変数へのアクセスに関する疑問



  
    
#include < iostream >
using namespace std;

class T
{
public :
T(){a
= 11 ;}
int Get() const { return a;}
private :
int a;
};

class Test
{
public :
Test(
int a):m_a(a){}
Test(
const Test & t){m_a = t.m_a;} //
Test & operator = ( const Test & t) //
{
m_a
= t.m_a;
}

// Test(const T &t){m_a = t.a;} // , T
Test( const T & t){m_a = t.Get();} //
void Print() const
{
cout
<< " m_a: " << m_a << endl;
}
private :
int m_a;
};

次のように解釈されます.
C++の限定子は限定クラスであり,限定オブジェクトではなく,タイプが同じであれば相互にアクセスできる.2つは同じタイプなので直接アクセスできますが、どのオブジェクトかを指定する必要があります.public、privateなどのアクセス権限とは、「クラス」にとって、「オブジェクト」にとってではなく、privateアクセス権は他のクラスではアクセスできません.このクラスの異なるオブジェクトではなく、アクセスできません.実はこれも非常に合理的で、類は自分で設計したので、もちろん自分でも類の内部構造を知っているので、自分に対しても類の“パッケージ”を行う必要はありません.メンバー関数でオブジェクトへのアクセスを許可するデータ・メンバーでは、セキュリティとパッケージングが保証される一方で、便利な操作が提供されます.最初の文の解釈は、メンバー関数のみがプライベートメンバーにアクセスできることを認め、ここでは友元や派生には関与しない.これにより、安全性が保証され、パッケージ作業も完了します.2番目の文について、インタフェースでデータ転送を実現しなければならない場合、操作は極めて不便ではないかと考えてみましょう.メンバー関数で十分なセキュリティとパッケージングが保証されている以上、ここでインタフェースを借りなければならないのは合理的ではありません.データ・メンバーの柔軟な処理として、設計者はメンバー関数でオブジェクトのプライベート・メンバーにアクセスすることを許可し、使用者に大きな便利さを提供します.これは言語の柔軟性と原則性を反映している.
変換元:http://securelvlan.spaces.live.com/Blog/cns!C60FD6EABDDFC877!1102.entry