まず、オブジェクトを 1 つ作成しましたFactory_Der
よね。では、this
ポインターはどのオブジェクトを指すのか、どのオブジェクトを指すことができるのかと尋ねると、オブジェクトは 1 つだけFactory_Der
です。オブジェクトです。
からFactory_Der
継承しているため、オブジェクトFactory
のメモリ レイアウトの一部をFactory_Der
オブジェクトとして表示できFactory
ます。しかし、それは同じオブジェクトの一部です。Factory
指している可能性のある「別の」オブジェクトはどこにもありません。
これらがコンストラクターであるという事実に巻き込まれたようです。ただし、コンストラクターは、メモリ割り当て後のオブジェクト構築中に「自動的に呼び出される」という点を除いて、メソッドと非常によく似ています。このオブジェクトの構造は次のようになると想像できます。
Factory_Der *foo = new Factory_Der;
以下のようなものに変換されます (実際の構文ではありません。ただし、これは Objective-C の方法です)。
Factory_Der *foo = malloc(sizeof(Factory_Der));
foo->constructor();
this
これは、コンストラクターがオブジェクトを指す理由を説明しています。
すべてのコンストラクターの先頭で、基本クラスとフィールドを初期化する方法を指定するオプションの初期化子リストを指定できます。(何かの初期化子をスキップすると、デフォルトが選択されます。)したがって、基本的に、コンストラクターは最初にスーパークラスのコンストラクターを自動的に呼び出します。
繰り返しになりますが、コンストラクターは次のようになると想像できます。
Factory_Der(std::string name) : Factory<Base>(name) { }
下で次のように変換されます。
void constructor(std::string name) { this->Factory<Base>::constructor(name); }
ご覧のとおり、派生クラスのコンストラクターは基本的に、そのコンストラクターを基本クラスのコンストラクターに「渡します」this
。したがって、彼らが見ているオブジェクトthis
は同じオブジェクトです。
もちろん、基本クラスのコンストラクターが実行されている時点では、派生クラスの状態は設定されていません。そのため、オブジェクトが本当に派生クラス オブジェクトと見なされるかどうかは、議論の問題です。しかし、Factory
コンストラクターthis
が参照するオブジェクトが、最終的にオブジェクトになるオブジェクトであるかどうかという質問であればFactory_Der
、答えは明確にイエスです。