0

Bobというクラスがあります

class Bob 
{
   int lol;

 public:
   int* returnpointer()
   {
     lol = 4;
     return &lol;
   }
};

int main()
{
  Bob A = new Bob();
  int * pointertoprivate = A.returnpointer();
  *pointertoprivate = 10;
}

したがって、メインは Bob の新しいインスタンスを宣言し、アクセスしてはならない Private 変数へのポインターを取得し、それを変更する必要があります。これは可能ですか?私はこれをコンパイルしようとしませんでした。

4

1 に答える 1

4

アクセス指定子は、名前の直接使用のみを制限します。ポインターを介したメンバーへの間接アクセスを制限しません。したがってmain、メンバーの名前はメンバー関数でのみ使用されるため、コードは実際にプライベートメンバーを変更できます。

(または、少なくとも、すべての構文エラーが修正された場合)

これは、オブジェクトが動的に割り当てられているかどうか (つまり、ヒープ上にあるかどうか) に関係なく当てはまります。newC++ では、本当に必要な場合以外は避ける習慣を身につけるべきです。

于 2013-10-21T17:56:27.843 に答える