それは、クラスのprivateメンバーにアクセスすることは可能ですか?

StackOverflow https://stackoverflow.com/questions/729363

  •  05-09-2019
  •  | 
  •  

質問

これは、C ++でクラスのプライベートメンバーにアクセスすることが可能です。

  

あなたは友人を持っていない提供   機能やユーザーへのアクセス権を持っていません   クラス定義

役に立ちましたか?

解決

あなたはアクセスを得るためにいくつかのポインタ演算を使用して意味ですか?それは可能ですが、確かに危険です。また、この質問を見てみましょう:プライベートメンバーにアクセスする

他のヒント

私はこのようないくつかの古い学校のトリックがあったと思います:

#define private public
#include "header.h"
#define private private

しかし、あなたは(私が言ったことをすぐにC ++標準ではこれについて何かを読んだ)これを行うことが強く推奨されている - あなたは

「の#defineプライベート、パブリック」のために、このGoogleについての詳細を読みたい場合は

さて私はrubishの話かもしれないが、私はあなたがたが異なる公開/プライベート修飾子を変更して、あなたに元のクラスをキャストするreintepret_castを使用するクラスと同じメンバーと「ツイン」クラスを定義しようと思いますこれであなたは、プライベートメンバーにアクセスすることができます。

そのビットハック; - )

コードのビットは、アイデアを説明します。

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

とどこかのコードでます:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

編集:誰かがすでに前に書いたように、これはうまくいくかもしれないが、標準が同じになり、パブリックとプライベート修飾子で変数の順序を保証するものではありませんので、

それはいくつかの厄介なハックによって可能であったとしても - 以前の記事を参照してください - あなたがすべき それをしません。

カプセル化は、非常に良い目的のために存在し、開発者がそのメンバーで周りの人に混乱を意図していない民間の手段として設定クラスのメンバー。それが意味する必要があります。

「あなたはそれが完全な意図限りだと、パブリックインターフェイスを使用するためには、このメンバにアクセスする必要はありません」
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top