c++で形状を変換する

4910 ワード

https://ence2.github.io/2020/11/c-%EC%BA%90%EC%8A%A4%ED%8C%85-%EC%B4%9D%EC%A0%95%EB%A6%AC%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%AC%EC%9D%B8%ED%84%B0-%EC%BA%90%EC%8A%A4%ED%8C%85-%ED%8F%AC%ED%95%A8/
//タイピングの文字を読む.
いつstatic cast vsいつdynamic cast
成形タイプを正確に知っている場合はstatic castを使用します.
派生したすべてのパラメータが関数に入り、処理が必要な場合はdynamic castを使用する必要があることは明確に指摘できない.
  • の関連例を考えてみましょう.
  • 4つの成形遷移がある.

    1番打者-static cast


    定義#テイギ#


    欠点。


    :トップダウン変換後、発生した問題はユーザーが担当します.
  • どうしてこんなことになったのですか.
    :派生オブジェクトのすべてのデータと関数を持つことはできません.これらの情報は基本オブジェクトに限定されます.
    //派生しても、派生した未継承データのみがあります.
    //これらのデータをどのように処理しますか??
  • 何の問題ですか.
    1)サブクラスのメンバーはゴミである可能性がある
    2)まったく異なるオブジェクト、またはメモリ構造が同じであるために同じ値を置き換えます.
  • なぜ使うのですか?

  • をダウンコンバートするとdynamic castよりも速度が速くなります.
  • のコンパイル時に変換タイプが決定されるため、速度が速くなります.
  • いつ使いますか。

  • 継承関係での変換に使用されます.
    しかし、彼に対する責任は完全にプログラマーにある.
    ->資料の種類を明確にするときに使用します.
  • c言語の変換に代わる友人
  • int iData1 = 200;
    int iData2 = 300;
    
    float fData = (float)iData1 / iData2;
    //이렇게 썻던 놈을 
    
    float fData2 = static_cast<float>(iData1) / iData2; 
    //이런식으로 사용함.
    
    サンプルコードを上から下へ変換

    ->上から下への変換を許可します.
    サンプルコードをアップコンバート

    ->アップコンバートは直接できますが、すでにオンになっています
    static castを使用して宣言することを推奨します
    アップコンバートはいつも正しいですか?

    ->コンパイルは問題ありませんが、show関数を呼び出すとき.
    Baseクラスの関数が呼び出されたことを確認します.
    どうしてこんなことになったの?
    これは、C++がデフォルトで静的バインディングに従うためです.
    ポインタ型のオブジェクトを資料型としているからです.
    ->処理するには、仮想関数を使用する必要があります.
    仮想関数は実行時に本当に定義されたタイプでデータ型を決定するためです.
    //結果

    トップダウン変換で発生した問題.

    ->KnightオブジェクトではなくPlayerオブジェクトを変換するため、ゴミ値が出力されます.
    ダウンコンバートしますが、通常は

    トップダウン変換後、派生オブジェクトの関数またはデータ参照の問題
    ->派生は、基本オブジェクトが派生オブジェクトのすべてのメンバーと関数を持つことができないことを示します.

    本当の大問題

    ->アーチャーを作りましたが、ナイトが印刷しました??
    ここで,クラスの内部構造が同じであれば,直接データを入れることが確認できる.


    注意事項


    無効な鋳造につながる可能性があります.
    ->トップダウン変換に使用する場合は、エスカレーションに使用するクラスに基づいて変換する必要があります.
    :キャバクラ、

    外部からパラメータに移動してstatic castを行う必要がある場合は、どのように処理しますか?

  • 安全装置を取り付ける必要があります.
    1)動的cast
    2)KnightかArcherかをさらに確認する必要がある.
  • //lukidsレポート熱血復習

    2番打者-dynamic cast


    定義#テイギ#


    :運転時に成形遷移を決定します.

    いつ使いますか。


    :

    なぜ使うのですか?


    :変換時のセキュリティを確保するために.

    欠点。


    :static castより速度が遅い.
  • なぜ遅いのですか?
    :コンパイラは、実行時にバイナリコードを作成して安定性を確認します.
  • 特長

  • アップコンバートもダウンコンバートも可能です.
  • をダウンコンバートするには、基本クラスに仮想関数が必要です.
  • 以前の静的castでのArcher->Knight変換とは異なり、実行時に成形変換チェックをチェックします.
  • const_cast


    定義#テイギ#


    :constを貼り付けたり外したりします.

    特長

  • const定数を除去します.
  • いつ使いますか。


    :定数形式の変数を既存の関数のパラメータとして使用します.
    例:
    パラメータに渡されるデータ型とパラメータのデータ型がconst宣言によって一致しない場合は、それらを使用できます.

    reinterpret_cast


    定義#テイギ#


    :変換の強制
  • の異なるカテゴリのオブジェクトポインタ間で置換できます.
  • コンパイラは責任を負いません.
  • いつ使いますか。


  • ポインタに関係のない他のタイプの遷移

  • voidタイプを返す場合:
    例えば、malloc

  • 強制変換の例


  • アドレス値を変更する例.


  • メモリプールにも使用されます.
    ->次のアドレスを指定します.

  • 次のメモリ、または以前のメモリを指すようですが、これは私のクラス比です.
  • 関連コード



    https://juheel.tistory.com/3