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