Когда вы узнаете о полиморфизме, вы обычно видите что-то вроде этого
class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data; virtual void fn(){} }
Что такое upcasting или downcasting? Является (Derived*)base_ptr;
ли upcast или downcast?
Я называю это унылым, потому что вы уходите с базы во что-то более конкретное. Другие люди говорили мне, что это уныло, потому что вы идете вниз по иерархии к чему-то конкретному, а вершина является корнем. Но другие люди, кажется, называют это так, как я это называю.
При преобразовании базового ptr в производный ptr это называется upcasting или downcasting? и если кто-то может сослаться на официальный источник или объяснить, почему его так называют, чем здорово.
virtual
ненужно, но не «больно». Можете ли вы уточнить, почему вы считаете, что его вообще не следует использовать в этом контексте?Ответы:
Это уныло: см. Статью в Википедии .
источник
На большинстве языков (насколько я знаю) обобщающие приведения выполняются автоматически. Так, обычно, если вы говорите о приведении в иерархии, вы имеете в виду специализированный состав. ИМХО большинство людей, желающих разделить два типа, называют специализированное приведение в нисходящее состояние, потому что они думают об иерархии наследования как о дереве. А в информатике корень изображен на вершине. Причиной этого является либо соглашение, либо, что более вероятно, глубокая ненависть к биологам среди ученых-компьютерщиков. (Все каламбуры предназначены.)
РЕДАКТИРОВАТЬ: Может быть, это первородная ненависть.
источник
Подумайте о том, как можно нарисовать дерево с «основанием» вверху страницы и листьями внизу. Если вы представляете свою иерархию классов таким образом, с базовым классом наверху и листьями где-то внизу, то повышение и понижение становятся буквальными - то, что перемещает страницу вверх от листа к основанию, является повышением. приведение и то, что движется вниз по странице от основания к листу, является понижением.
источник