C ++のプロトタイプデザインパターンとコピーコンストラクターの違いは何ですか

ウラジミールTsyshnatiy

プロトタイプデザインパターンをいつ使用すべきかを理解しようとしています。これが私が理解しているプロトタイプの例です:

class Prototype
{
public:
    virtual Prototype* clone() = 0;
...
};

class ConcretePrototype : public Prototype
{
public:
    Prototype* clone() override { ... }
};

// Usage:
ConcretePrototype proto;
auto protPtr = proto.clone();

質問はどこにありますか:なぜこれがより良いのか:

class Obj
{
public:
    Obj();

    Obj(const Obj&);
    Obj& operator = (const Obj& other);
};

Obj o;
Obj o2 = o;

では、実際にPrototypeを使用する必要があるのはいつですか?

Mateusz Kubuszok

コピーコンストラクターは言語の要素です。

プロトタイプは、既存のインスタンスに基づいて(ポリモーフィック)オブジェクトを生成するために使用されるデザインパターンです。

があるかもしれない時にプロトタイプが使用されている間、コピーコンストラクタは、オブジェクトの正確なインスタンスを知る際に使用されることを意図して、後者を実装するために、元を使用することは困難であろう任意のいくつかのインターフェイスの可能な実装とあなただけの新しいオブジェクトを取得したいですいくつかの奇妙なキャストとチェックの方法に頼ることなく、まったく同じ実装の。

インターフェイスIと実装A、およびがあると仮定しましょうBある時点で、オブジェクトのi実装が与えられますIおそらく、それを変更したくないでしょう。代わりに、新しいインスタンスを取得して、それにいくつかの変更を導入することをお勧めします。正確なクラスがわからない場合、どうすればそれを達成できiますか?プロトタイプパターンは、その問題に対する1つの解決策ですI* i2 = i.clone();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++のコンセプトとインターフェイスの違いは何ですか?

分類Dev

C ++コンセプトとJavaインターフェースの違いは何ですか?

分類Dev

C ++コンストラクターは同じキー/値タイプのstd :: mapとあいまいです

分類Dev

コンストラクター(C ++)でのプライベートメンバーの初期化の違い

分類Dev

C ++の暗黙的なデフォルトコンストラクターのポイントは何ですか?

分類Dev

C ++ 17とC ++ 11の非型テンプレートパラメーターの違いは何ですか?

分類Dev

C ++でプライベートコピーコンストラクターと削除済みコピーコンストラクターを使用する理由

分類Dev

関数テンプレートの動作を本番コードとテストコードの間で交換するために使用できるC ++デザインパターンは何ですか?

分類Dev

c#winforms:デザイナーを使用してフォームにbackgroundworkerコンポーネントをドロップするか、オブジェクト変数としてインスタンス化するだけの違い

分類Dev

C ++構造体では、コンストラクターのデフォルト値とデフォルト引数の違いは何ですか?

分類Dev

オープンクローズド原則C#:プライベートセット+コンストラクターInitはその例ですか?

分類Dev

コピーとダウンキャストを回避するためのC ++デザインパターン

分類Dev

C ++ 17の別のコンストラクターとは異なる引数タイプでコンストラクターを呼び出す

分類Dev

C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

分類Dev

C ++での2つのコピーコンストラクター呼び出しの違いは何ですか?

分類Dev

クラステンプレートとそのタイプを処理するC ++の方法は何ですか?

分類Dev

C#の抽象クラスでのプライベートコンストラクターの使用は何ですか?

分類Dev

C言語ライブラリはプリコンパイルされています。それでは、別のプロセッサベースのコンピュータでどのようにリンクされていますか?

分類Dev

C ++のSignExtensionはコンパイラオプションですか、それともコンパイラ依存またはターゲット依存ですか?

分類Dev

JavaインターフェースとObjective-Cプロトコルの違いは?

分類Dev

C ++の「コンセプト」とダックタイピングの関係は何ですか?

分類Dev

テンプレートパラメータとして提供されるアロケータと、C ++コンテナのコンストラクタ引数として提供されるアロケータの違いは?

分類Dev

ユーザーコントロールC#のデザインタイムタスクを作成します

分類Dev

クロスプラットフォームのオープンソースUIに依存しないC#クラスライブラリに選択するVisual Studio 2017プロジェクトタイプとその理由は何ですか?

分類Dev

C ++テンプレートのクラス名とタイプ名の違い

分類Dev

コンピュータメモリとC ++の観点から「バイト」を定義することの違いは何ですか?

分類Dev

エラーC2512:適切なデフォルトコンストラクターが利用できません-プロパティがコンストラクターで初期化されているのはなぜですか?

分類Dev

コンストラクターパラメーターを使用したクラスオブジェクトのインスタンス化とパラメーターなしの*演算子のインスタンス化の違いC ++

分類Dev

C ++の暗黙的なコピーコンストラクターをインターセプトするか、その機能を呼び出します

Related 関連記事

  1. 1

    C ++のコンセプトとインターフェイスの違いは何ですか?

  2. 2

    C ++コンセプトとJavaインターフェースの違いは何ですか?

  3. 3

    C ++コンストラクターは同じキー/値タイプのstd :: mapとあいまいです

  4. 4

    コンストラクター(C ++)でのプライベートメンバーの初期化の違い

  5. 5

    C ++の暗黙的なデフォルトコンストラクターのポイントは何ですか?

  6. 6

    C ++ 17とC ++ 11の非型テンプレートパラメーターの違いは何ですか?

  7. 7

    C ++でプライベートコピーコンストラクターと削除済みコピーコンストラクターを使用する理由

  8. 8

    関数テンプレートの動作を本番コードとテストコードの間で交換するために使用できるC ++デザインパターンは何ですか?

  9. 9

    c#winforms:デザイナーを使用してフォームにbackgroundworkerコンポーネントをドロップするか、オブジェクト変数としてインスタンス化するだけの違い

  10. 10

    C ++構造体では、コンストラクターのデフォルト値とデフォルト引数の違いは何ですか?

  11. 11

    オープンクローズド原則C#:プライベートセット+コンストラクターInitはその例ですか?

  12. 12

    コピーとダウンキャストを回避するためのC ++デザインパターン

  13. 13

    C ++ 17の別のコンストラクターとは異なる引数タイプでコンストラクターを呼び出す

  14. 14

    C ++「新しい」タイプのテンプレートを特殊化するときに、コンストラクターパラメーターを事前定義するにはどうすればよいですか。

  15. 15

    C ++での2つのコピーコンストラクター呼び出しの違いは何ですか?

  16. 16

    クラステンプレートとそのタイプを処理するC ++の方法は何ですか?

  17. 17

    C#の抽象クラスでのプライベートコンストラクターの使用は何ですか?

  18. 18

    C言語ライブラリはプリコンパイルされています。それでは、別のプロセッサベースのコンピュータでどのようにリンクされていますか?

  19. 19

    C ++のSignExtensionはコンパイラオプションですか、それともコンパイラ依存またはターゲット依存ですか?

  20. 20

    JavaインターフェースとObjective-Cプロトコルの違いは?

  21. 21

    C ++の「コンセプト」とダックタイピングの関係は何ですか?

  22. 22

    テンプレートパラメータとして提供されるアロケータと、C ++コンテナのコンストラクタ引数として提供されるアロケータの違いは?

  23. 23

    ユーザーコントロールC#のデザインタイムタスクを作成します

  24. 24

    クロスプラットフォームのオープンソースUIに依存しないC#クラスライブラリに選択するVisual Studio 2017プロジェクトタイプとその理由は何ですか?

  25. 25

    C ++テンプレートのクラス名とタイプ名の違い

  26. 26

    コンピュータメモリとC ++の観点から「バイト」を定義することの違いは何ですか?

  27. 27

    エラーC2512:適切なデフォルトコンストラクターが利用できません-プロパティがコンストラクターで初期化されているのはなぜですか?

  28. 28

    コンストラクターパラメーターを使用したクラスオブジェクトのインスタンス化とパラメーターなしの*演算子のインスタンス化の違いC ++

  29. 29

    C ++の暗黙的なコピーコンストラクターをインターセプトするか、その機能を呼び出します

ホットタグ

アーカイブ