Разве это не уныло? - PullRequest
       11

Разве это не уныло?

3 голосов
/ 27 апреля 2010

Если я делаю

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

Разве я не "удручен"?

ИЛИ

Этот термин используется только в терминах классов и объектов?


Я сбит с толку, потому что в этом случае мы «понижаем» с большего double до меньшего int, но в случае классов мы «понижаем» с меньшего base class до большего derived class .

Не являются ли эти два соглашения в некотором смысле противоположными?

Ответы [ 5 ]

7 голосов
/ 27 апреля 2010

Уныние - это акт наложения ссылка базового класса на один из его производные классы.

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

Нет, вы не понижены, так как double и int не являются классами.

3 голосов
/ 27 апреля 2010

Нет, вы не понижаете. Вы просто кастуете, и после десятичной дроби что-то отрубаете.

Литье вниз здесь не применимо. Примитивы int и double не являются объектами в C ++ и не связаны друг с другом, как два объекта в иерархии классов. Это отдельные и примитивные сущности.

Приведение вниз - это акт приведения одного объекта в другой, производный от него. Это относится к акту перехода от корня иерархии классов. Это не имеет ничего общего с размерами рассматриваемых типов.

0 голосов
/ 28 апреля 2010

Вы не кастуете - вы конвертируете. Совсем другое дело.

0 голосов
/ 27 апреля 2010

Два не столько противоположны, сколько просто не связаны. В этом примере мы берем значение одного типа, и приведение принимает его и выдает аналогичное значение типа, который неопределенно похож, но совершенно не связан.

В случае обхода дерева наследования с чем-то вроде dynamic_cast мы берем указатель (или ссылку) на объект, и ранее решив рассматривать его как указатель на какой-то другой тип объекта, мы Вы в основном (пытаетесь) трактовать это как (что-то ближе) к исходному типу объекта снова. В частности, однако, мы не создаем новое или другое значение вообще - мы просто создаем другое представление того же значения (т. Е. Того же самого фактического объекта).

0 голосов
/ 27 апреля 2010

int и double являются примитивами, а не классами, поэтому понятия классов к ним неприменимы.

Да, это преобразование из «большего» в «меньший» тип (с точки зрения числового размера), но это просто «приведение», а не «снижение»

...