C ++は、主に誤用を避け、メンテナンスコストを削減するために、プライベートメンバーや機能の可視性を制限するために使用されます。
一部の人々が考える、鉱山は私のものです、あなたは、私は私がしたいと思わないと思います。直接プライベートメンバにアクセスしてもいない場合、私はまた、アクセスする他の方法を見つける必要があります。それは私有財産へのアクセス権を持っているものの方法を見てみましょう。
パラメータをコンパイルすることによりオープン
-fno-access-control
GCCコンパイラオプションは、あなたが直接、プライベートプロパティにアクセスするための扉を開くことができます。主ユニットテストのために使用。
オブジェクトがアクセスするアドレスオフセット
C ++オブジェクトは、ポインタの配列と見なすことができます。ポインタの配列をに格納されたオブジェクトと仮想関数テーブルデータメンバのアドレス。それは配列へのポインタであるため、当然のことながら、ことができるアクセスする任意のメンバは、ポインタを介してオブジェクト。例として:
class Test
{
public:
void print()
{
printf("%d %d %d\n", m_a, m_b, m_c);
}
private:
int m_a;
int m_b;
int m_c;
};
int main(int argc, char *argv[])
{
Test t;
int *a = (int *)&t+0; /* m_a的地址 */
int *b = (int *)&t+1; /* m_b的地址 */
int *c = (int *)&t+2; /* m_c的地址 */
*a = 10;
*b = 20;
*c = 30;
t.print();
return 0;
}
出力:
10 20 30
マクロ置換を使用してください
次のマクロを使用してprivate
置き換えキーワードpublic
アクセス私有財産への扉を開くために。
#define private public
いくつかの視点
一部の人々は、プログラムにそのクラスの存在を認めたため、民間、そのクラスのパブリック、保護は、生活の中で物事をシミュレートすることができます考えているようです。Qtの6月には、主に無差別にユーザを制限するために、アクセスのレベルを作成する理由、それは、真実ではないと考えています。しかし、たとえこの機構を無差別Jiabu朱ユーザーを理解することはありません。
世間の注目いいえQtの6月、最新のプッシュは初めて。