C には 2 種類のメンバー データ (static、nostatic) と 3 種類のメンバー関数 (static、nostatic、virtual) があることを知っておく必要があります。実際、通常のメンバー関数の場合、パラメーターに this ポインターが含まれています。このポインタは、実際には、このポインタを通じてオブジェクト自体を指します。 C コンパイラは、どのオブジェクトがクラスのメンバー関数を呼び出すかを認識します。
C には、static、nostatic という 2 種類のメンバー データと、static、nostatic、virtual という 3 種類のメンバー関数があることを知っておく必要があります。
このケースを以下で見てください:
class A { int a; int b; };class B { int a; int b; static int c; };class C { int a; int b; static int c;public: void func() {} static void pg() {} };int main() { //1. 分析A对象占的内存 A a; cout << sizeof(a) << endl; //结果是8 //2. 分析B对象占的内存 B b; cout << sizeof(b) << endl; //结果是8 //3. 分析C对象占的内存 C c; cout << sizeof(c) << endl; //结果是8 return 0; }
実際、出力結果に基づいて、次の結論を導き出します:
a. メンバー変数:
実際、通常のメンバー関数 (静的メンバー関数ではない) の場合、パラメーターに this ポインターがあります。このポインタは、実際には、このポインタを通じてオブジェクト自体を指します。 C コンパイラは、どのオブジェクトがクラスのメンバー関数を呼び出すかを認識します。
b. クラス C の通常のメンバー関数 (コンストラクターを含みますが、静的メンバーを除く)関数) はすべて、現在のオブジェクトを指す this ポインターを含みます;
c. 静的メンバー関数と静的メンバー変数はクラスに属します;
d. 静的メンバー関数と通常のメンバー関数の違い:
静的メンバー関数には特定のオブジェクトを指す this ポインターが含まれませんが、通常のメンバー関数には特定のオブジェクトを指すポインターが含まれます。
記事の概要
b. C コンパイラはクラスとオブジェクトをどのように管理しますか?具体的には、オブジェクトはクラス内のメソッドを呼び出します。C コンパイラはどの特定のオブジェクトがどのメンバー メソッドを呼び出すかをどのように区別しますか?
class A { int a; int b; };class B { int a; int b; static int c; };class C { int a; int b; static int c;public: void func() {} static void pg() {} };int main() { //1. 分析A对象占的内存 A a; cout << sizeof(a) << endl; //结果是8 //2. 分析B对象占的内存 B b; cout << sizeof(b) << endl; //结果是8 //3. 分析C对象占的内存 C c; cout << sizeof(c) << endl; //结果是8 return 0; }
要約しましょう:
a. クラス C オブジェクトのメンバー変数とメンバー関数は別々に保存されます;
d. 静的メンバー関数と通常のメンバー関数の違い:
静的メンバー関数には特定のオブジェクトを指す this ポインターが含まれませんが、通常のメンバー関数には特定のオブジェクトを指すポインターが含まれます。
関連する推奨事項:
PHP オブジェクト指向プログラミングの詳細な説明: クラスとオブジェクト_PHP チュートリアル
以上が技術的な回答 オブジェクト指向の予備的な理解 (C++ クラス)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。