这不是贬低?

时间:2010-04-27 19:07:30

标签: c++ conventions downcast

如果我这样做

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

我不是“沮丧”吗?

OR

这个术语只用于类和对象吗?


我感到困惑,因为在这种情况下,我们会从较大的double向较小的int“向下转发”,但是在课堂上,我们会从较小的base class“向下”更大的derived class

在某种意义上,这两个惯例是否相反?

5 个答案:

答案 0 :(得分:7)

  

向下倾斜是铸造的行为   一个基类的引用   它的派生类。

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

不,你不要贬低,因为double和int不是类。

答案 1 :(得分:3)

不,你没有失败。你只是在施法,而你正在砍掉小数后的任何东西。

向下施放不适用于此处。原语intdouble不是C ++中的对象,并且在类层次结构中的两个对象的方式上彼此不相关。它们是独立的原始实体。

向下转换是指将一个对象转换为从其派生的另一个对象的行为。它指的是从类层次结构的根向下移动的行为。它与相关类型的大小无关。

答案 2 :(得分:0)

intdouble都是基元而不是类,因此类的概念不适用于它们。

是的,它是从“较大”类型到“较小”类型的转换(就数字大小而言),但它只是一个“演员”而不是“向下倾斜”

答案 3 :(得分:0)

这两者并非如此简单无关。在示例的情况下,我们采用一种类型的值,并且强制转换采用该类型并生成类似的值,该类型的值非常相似,但完全不相关。

在使用类似dynamic_cast的东西遍历继承树的情况下,我们将一个指针(或引用)带到一个对象,并且之前决定将其视为指向其他类型对象的指针,我们基本上(试图)将它视为(更接近)原始类型的对象。但是,特别是,我们创建一个新的或不同的值 - 我们只是创建一个相同值的不同视图(即,相同的实际对象)。

答案 4 :(得分:-1)

你不是在施展 - 你正在转变。完全不同的东西。