まず、オブジェクトを 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、答えは明確にイエスです。