プロパティとメソッドに対するコンパイラの処理メカニズム
C++のクラスはオブジェクト指向の理論から始まり、現実世界のクラスを記述するために変数(プロパティ)と関数(メソッド)を一元的に定義します。コンピュータの観点から見ると、プログラムは依然としてデータ セグメントとコード セグメントで構成されています。
C++ コンパイラーはどのようにしてオブジェクト指向理論をコンピューター プログラムに変換するのですか?
言い換えると: C++ コンパイラーはクラス、オブジェクト、クラスとオブジェクトの間の関係をどのように管理しますか
具体的に言うと: 特定のオブジェクトがクラス内のメソッドを呼び出した場合、C++ コンパイラーはどのオブジェクトが固有であるかをどのように区別するのでしょうか? ? クラス、このメソッドを呼び出してはどうでしょうか?
1) C++ クラス オブジェクトのメンバー変数とメンバー関数は別々に格納されます
メンバー変数:
通常のメンバー変数: オブジェクトに格納され、同じメモリ レイアウトと構造体変数を持ちます。
静的メンバー変数: グローバル データ領域に格納されます。
メンバー関数: コード セグメントに格納されます。
疑問が生じます: 多くのオブジェクトがコードの一部を共有しているのでしょうか?コードは特定のオブジェクトをどのように区別するのでしょうか?
言い換えると、 int getK() const { return k; } では、コードは obj1、obj2、obj3 オブジェクトの特定の k 値をどのように区別するのでしょうか?
左側は C++ クラスの実装、右側は対応する基礎となる実装です。
概要:
1. C++ クラス オブジェクトのメンバー変数とメンバー関数は別々に保存されます。 C 言語の 4 領域メモリ モデルはまだ機能します。
2. C++ のクラスの通常のメンバー関数には、現在のオブジェクトを指す this ポインターが暗黙的に含まれます。
3. 静的メンバー関数とメンバー変数はクラスに属します
静的メンバー関数と通常のメンバー関数の違い
静的メンバー関数には特定のオブジェクトへのポインターが含まれません
通常のメンバー関数には特定のオブジェクトへのポインターが含まれます
拡張機能:
考察: クラスのメンバー関数は const によって変更できます。 const によって変更されるのは誰ですか?
void const get(int a,intb)//类的成员函数 { this->a=100;//错误 this->b=200;//错误 }
上記の分析によれば、内部実装は
void get (const Test *This,int a,int b)
したがって、const はこのポインタが指すメモリ空間を変更します。
上記は、C++ レビューの重要なポイントの 6 番目の要約です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。