C++アクセス制御のprivateプロファイリング

833 ワード

今日C++Primerを見て、リロード操作演算子練習プログラムを書くとき、メンバー関数でパラメータの同じタイプのオブジェクトのprivateメンバーを直接操作します.プログラムは以下の通りです.
OperatorOverload& OperatorOverload::operator=(const OperatorOverload &op)
{
	m_nNum1 = op.m_nNum1;	//op.getNum1();  m_nNum1 private
	m_nNum2 = op.m_nNum2;	//op.getNum2();  m_nNum2 private

	return *this;
}

プログラムがコンパイルできるなんて、privateのアクセス制御権限に疑問を抱かせます.オブジェクトにアクセスできないprivateメンバーではないでしょうか.
後でこの文章を見て、著者はC++のアクセス制御について比較的に詳しく紹介して、見終わった後にC++のprivateアクセス制御に対して新しい認識がありました.
元のC++オブジェクトをインスタンス化するときはデータメンバーをインスタンス化するだけで、メンバー関数はすべてのクラスオブジェクトが共有しています.つまり、クラスにはメンバー関数が1つしかありません.クラスのメンバー関数はprivateとクラスの対象のデータメンバーを含むクラスの任意のデータメンバーにアクセスできます.クラスの複数のオブジェクトのデータ・メンバーにアクセスする必要がある場合は、クラスのpublic関数にクラス・オブジェクトの参照またはポインタを入力することで、クラスの他のオブジェクトのデータ・メンバーを操作できます.
まとめ:C++のアクセス制御子は、オブジェクト単位ではなくクラス単位です.