C での多態性オブジェクトのコピー : クローン コンストラクターとコピー コンストラクターについて
C では、継承により多態性クラスを作成できます。派生クラスのオブジェクトは、基底クラスのポインタとして保存されます。このようなオブジェクトを扱うときは、そのオブジェクトのディープ コピーを作成する必要が生じることがよくあります。従来のコピー コンストラクターとoperator= オーバーロードでは十分ではないかもしれませんが、特定のアプローチが必要です。
質問で示されているように、 Clone() メソッドを使用するというアイデアは、 C の一般的な手法です。この抽象メソッドは基本クラスで宣言され、派生クラスに実装されて、その特定の型のディープ コピーを作成します。
ただし、このプロセスを簡素化する、より C 固有のアプローチがあります。共変戻り型の概念を採用することにより、派生クラスは Clone() メソッドをオーバーライドするときに自分自身へのポインターを返すことができます。さらに、派生クラスのプライベートまたは暗黙的なコピー コンストラクターは、実際のデータ メンバーのコピーを処理できます。
例を次に示します。
class Base { public: virtual Base* Clone() = 0; }; class Derivedn : public Base { public: // Covariant return type allows returning a pointer to a derived class. Derivedn* Clone() { return new Derivedn(*this); } private: Derivedn(const Derivedn&) : ... {} };
このアプローチでは、Derivedn の Clone() メソッドが使用されます。それ自体と同じ型の新しいオブジェクトへのポインタを返します。 Derivedn のプライベート コピー コンストラクターは、データ メンバーのコピーを処理し、ディープ コピーを保証します。
この手法は、オブジェクト指向の原則に準拠しながら、C で多態性オブジェクトのコピーを作成するクリーンで簡潔な方法を提供します。
以上がクローンと共変の戻り値の型を使用して C で多態性オブジェクトをディープ コピーする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。