1)アクセス指定子同じアクセス特定内のデータメンバのレイアウトの順序()(、実際の構造の一部であり、「構造」から作成されたオブジェクトには影響を与えません。間違った
public
,protected
またはprivate
)は、コード内での順序によって指定されますが、異なる指定子を持つデータメンバーに対しては順序は指定されません。
class Foo
{
public:
int a;
int b;
protected:
int c;
int d;
};
私たちが知っている唯一のものはa
がb
前に来なければならないとc
がd
前に来なければならないということです。 abcd
,acbd
,acdb
,cabd
,cadb
およびcdab
が可能である。
2)アクセス仕様情報のすべてのプログラムはコンパイル時に( を実行する前に消える)実行中のプログラム.IN、オブジェクトは、「ストレージの領域」 、より何になる...ので、私たちはすべての破ることができます規則とメモリに直接アクセスする できるだけ早く
この情報はコンパイル時にのみ使用されますが、コンパイルは実行コードを生成するものです。したがって、コンパイルにより、private
のメンバーにアクセスすることはありません。しかし、ダイレクトメモリ操作が許可されているので、あなたは効果的にprivate
メンバーまたは機能にアクセスすることができます。
3)は、C++を抽象化するために、それは純粋に理論的な引数のために少し考慮して、実際の使用に向けの本当の
実用的な手段を熱望していない、実用的になるように設計されています。 CS理論から構築された言語は、例えば、非常に健全な数学的背景を有するHaskellを含む。一方、C++には、ユーザーにとって有用と思われる機能が蓄積されています。
また、C++では、(メモリ管理のような)低レベルの詳細が隠されることはありません。良いC++コードは一般に、コンパイラに任せ、イディオムを使用して抽象化しようとしますが、必要に応じて常にアセンブリコードを直接組み込んでも金属に近づけることができます。あなたがしていることに注意を払う必要があります。
memset(&foo, int 0, sizeof(foo)); // wipes them all
fwrite(&foo, sizeof(foo), 1, fp); // dumps them to stream fp
いくつかのコメンターが指摘したように、これはC++標準の下で未定義の動作を誘発するので、あなたは、この(またはそれを試みる前に、あなたのコンパイラを知っている:あなたは非常に簡単にプライベートメンバ変数に取得することができ
ありがとうございます – user388338