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言語の変換に代わる友人
->上から下への変換を許可します.
サンプルコードをアップコンバート
->アップコンバートは直接できますが、すでにオンになっています
static castを使用して宣言することを推奨します
アップコンバートはいつも正しいですか?
->コンパイルは問題ありませんが、show関数を呼び出すとき.
Baseクラスの関数が呼び出されたことを確認します.
どうしてこんなことになったの?
これは、C++がデフォルトで静的バインディングに従うためです.
ポインタ型のオブジェクトを資料型としているからです.
->処理するには、仮想関数を使用する必要があります.
仮想関数は実行時に本当に定義されたタイプでデータ型を決定するためです.
//結果
トップダウン変換で発生した問題.
->KnightオブジェクトではなくPlayerオブジェクトを変換するため、ゴミ値が出力されます.
ダウンコンバートしますが、通常は
トップダウン変換後、派生オブジェクトの関数またはデータ参照の問題
->派生は、基本オブジェクトが派生オブジェクトのすべてのメンバーと関数を持つことができないことを示します.
本当の大問題
->アーチャーを作りましたが、ナイトが印刷しました??
ここで,クラスの内部構造が同じであれば,直接データを入れることが確認できる.
無効な鋳造につながる可能性があります.
->トップダウン変換に使用する場合は、エスカレーションに使用するクラスに基づいて変換する必要があります.
:キャバクラ、
安全装置を取り付ける必要があります.
1)動的cast
2)KnightかArcherかをさらに確認する必要がある. //lukidsレポート熱血復習
2番打者-dynamic cast
なぜ遅いのですか?
:コンパイラは、実行時にバイナリコードを作成して安定性を確認します. アップコンバートもダウンコンバートも可能です. をダウンコンバートするには、基本クラスに仮想関数が必要です. 以前の静的castでのArcher->Knight変換とは異なり、実行時に成形変換チェックをチェックします.
const_cast
const定数を除去します.
:定数形式の変数を既存の関数のパラメータとして使用します.
例:
パラメータに渡されるデータ型とパラメータのデータ型がconst宣言によって一致しない場合は、それらを使用できます.
reinterpret_cast
の異なるカテゴリのオブジェクトポインタ間で置換できます. コンパイラは責任を負いません.
ポインタに関係のない他のタイプの遷移
voidタイプを返す場合:
例えば、malloc
強制変換の例
アドレス値を変更する例.
メモリプールにも使用されます.
->次のアドレスを指定します.
次のメモリ、または以前のメモリを指すようですが、これは私のクラス比です.
https://juheel.tistory.com/3
//タイピングの文字を読む.
いつstatic cast vsいつdynamic cast
成形タイプを正確に知っている場合はstatic castを使用します.
派生したすべてのパラメータが関数に入り、処理が必要な場合はdynamic castを使用する必要があることは明確に指摘できない.
1番打者-static cast
定義#テイギ#
欠点。
:トップダウン変換後、発生した問題はユーザーが担当します.
:派生オブジェクトのすべてのデータと関数を持つことはできません.これらの情報は基本オブジェクトに限定されます.
//派生しても、派生した未継承データのみがあります.
//これらのデータをどのように処理しますか??
1)サブクラスのメンバーはゴミである可能性がある
2)まったく異なるオブジェクト、またはメモリ構造が同じであるために同じ値を置き換えます.
なぜ使うのですか?
いつ使いますか。
しかし、彼に対する責任は完全にプログラマーにある.
->資料の種類を明確にするときに使用します.
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かをさらに確認する必要がある.
2番打者-dynamic cast
定義#テイギ#
:運転時に成形遷移を決定します.
いつ使いますか。
:
なぜ使うのですか?
:変換時のセキュリティを確保するために.
欠点。
:static castより速度が遅い.
:コンパイラは、実行時にバイナリコードを作成して安定性を確認します.
特長
例
const_cast
定義#テイギ#
:constを貼り付けたり外したりします.
特長
いつ使いますか。
:定数形式の変数を既存の関数のパラメータとして使用します.
例:
パラメータに渡されるデータ型とパラメータのデータ型がconst宣言によって一致しない場合は、それらを使用できます.
reinterpret_cast
定義#テイギ#
:変換の強制
いつ使いますか。
ポインタに関係のない他のタイプの遷移
voidタイプを返す場合:
例えば、malloc
強制変換の例
アドレス値を変更する例.
メモリプールにも使用されます.
->次のアドレスを指定します.
次のメモリ、または以前のメモリを指すようですが、これは私のクラス比です.
関連コード
https://juheel.tistory.com/3
Reference
この問題について(c++で形状を変換する), 我々は、より多くの情報をここで見つけました https://velog.io/@kwt0124/c에서의-형변환-53b1pogpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol