Що таке оновлення / пониження?


16

Дізнавшись про поліморфізм, ти зазвичай бачиш щось подібне

class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data;  virtual void fn(){} }

Що таке поштовх чи зрив? Чи (Derived*)base_ptr;є похмурий або знищений?

Я називаю це похмурим, тому що ви відходите від бази на щось більш конкретне. Інші люди сказали мені, що це похит, оскільки ти йдеш вниз по ієрархії в щось конкретне, верхня частина - корінь. Але інші люди, здається, називають це так, як я його називаю.

При перетворенні базового ptr у похідне ptr це називається оновленням або пониженням? і якщо хтось може зв’язатись з офіційним джерелом або пояснити, чому його називають, ніж великим.



3
Це не дублікат. Це питання запитує, що це таке, інший запитує, хто придумав імена.
Роберт Харві

1
@RobertHarvey "і якщо хтось може зв’язатись з офіційним джерелом або пояснити, чому його називають, то великим". але погодився, це можна вважати лише частиною питання.
Стівен Євріс

стежте за цією віртуальною в класі Похідне. Ви не хочете писати цього, якщо ви не отримаєте клас Derived ще раз. void fn () {...} достатньо.
аплодуйте

JustaPro: додавання virtualзайве, але не "шкодить". Чи можете ви детальніше пояснити, чому ви вважаєте, що його взагалі не слід використовувати в цьому контексті?
Нік Бугаліс

Відповіді:


17
Is (Derived*)base_ptr; an upcast or downcast?

Це пониження: див. Статтю Вікіпедії про це.

В об'єктно-орієнтованому програмуванні , що знижує приведення або типу уточнення актого лиття посилання базового класу до одного з його похідних класів.

У багатьох мовах програмування можна за допомогою RTTI перевірити, чи є тип посилається об'єкта справді тим, на кого передано, або похідний його тип, і таким чином видавати помилку, якщо це не так.

Іншими словами, коли змінна базового класу ( батьківський клас ) має значення похідного класу ( дочірнього класу ), можливе зменшення рівня мовлення ...


9

У більшості мов (наскільки я знаю) узагальнюючі касти виконуються автоматично. Отже, зазвичай, якщо ви говорите про акторський склад у межах ієрархії, ви маєте на увазі спеціалізовану ролю. Більшість людей, які бажають розділити два типи ІМХО, називають спеціалізовану скинуту, оскільки вони вважають ієрархію спадкування як дерево. І в інформатиці корінь зображений на вершині. Причиною цього є або конвенція, або, що, швидше за все, глибоко вкорінена ненависть до біологів серед комп'ютерних вчених. (Усі каламбури призначені.)

EDIT: Можливо, це верхня коріння ненависть.


LOL повинен +1 :).

2

Подумайте про звичайний спосіб малювання дерева з «основою» вгорі сторінки та листям внизу. Якщо ви представляєте свою ієрархію класів таким чином, коли базовий клас у верхній частині та листя десь внизу, то вгору та введення вниз стають буквальними - те, що рухається вгору сторінки від аркуша до основи, - це лиття, і те, що рухається вниз по сторінці від основи до аркуша, є низкою.


2
Але дерева піднімаються вгору і їх стовбури стоять на землі, виходячи з ґрунту. (Ось чому я продовжую думати

@ acidzombie24: Але в книгах з інформатики ви виявите, що дерева зазвичай малюються, як я описав, з коренем вгорі.
Джеррі Труну

Я знаю, але мені просто було смішно. Дерева (справжні) та основи (як фундамент та під моїми ногами) - такі погані способи подумати про це :(. +1

5
@ acidzombie24: Подумайте про них як про дерева в Австралії.
Мартін Йорк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.