3

私が行った場合

double d = 34.56;
int i = (int)d;

私は「ダウンキャスト」していませんか?

また

この用語は、クラスとオブジェクトの観点からのみ使用されていますか?


doubleこの場合、大きいものから小さいものに「ダウンキャスト」しているので混乱していますintが、クラスの場合は、小さいものから大きいものに「ダウンキャスト」していbase classますderived class

これらの2つの規則は、ある意味で反対ではありませんか?

4

5 に答える 5

7

ダウンキャストは、基本クラスの参照をその派生クラスの1つにキャストする行為です。

http://en.wikipedia.org/wiki/Downcasting

いいえ、doubleとintはクラスではないため、ダウンキャストしません。

于 2010-04-27T19:10:25.647 に答える
3

いいえ、あなたはダウンキャストしていません。あなたはただキャストしているだけで、小数点以下は何でも切り刻んでいます。

ここではダウンキャストは適用されません。プリミティブintdoubleはC++のオブジェクトではなく、クラス階層内の2つのオブジェクトのように相互に関連していません。それらは別個の原始的な実体です。

ダウンキャストとは、あるオブジェクトをそれから派生した別のオブジェクトにキャストする行為を指します。これは、クラス階層のルートから下に移動する行為を指します。問題のタイプのサイズとは何の関係もありません。

于 2010-04-27T19:10:09.343 に答える
0

intdoubleはどちらもプリミティブでクラスではないため、クラスの概念は適用されません。

はい、これは「大きい」タイプから「小さい」タイプへの変換ですが (数値サイズに関して)、「キャスト」であり、「ダウンキャスト」ではありません。

于 2010-04-27T19:11:33.467 に答える
0

この 2 つは相反するものではなく、単に無関係なだけです。この例では、1 つの型の値を取得しており、キャストはそれを取得して、漠然と似ているが完全に無関係な型の同様の値を生成します。

のようなもので継承ツリーをトラバースする場合dynamic_cast、オブジェクトへのポインター (または参照) を取得し、以前にそれを他のタイプのオブジェクトへのポインターとして扱うことを決めていたので、基本的に (しようとしています)再び元のタイプのオブジェクト(に近いもの)として扱います。ただし、特に、新しい値や別の値を作成しているわけではありません。同じ値の別のビュー (つまり、同じ実際のオブジェクト) を作成しているだけです。

于 2010-04-27T19:13:30.450 に答える
-1

あなたはキャストしているのではなく、変換しています。全く別物。

于 2010-04-27T20:19:13.707 に答える