Re: Перетворення масива наслідників до базового?
Так-с, на це потрібен час, щоб з цим жити далі. Я вірно розумію, що так краще не робити, але бувають вийнятки з правил, як завжди?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Перетворення масива наслідників до базового?
Для відправлення відповіді ви повинні увійти або зареєструватися
Так-с, на це потрібен час, щоб з цим жити далі. Я вірно розумію, що так краще не робити, але бувають вийнятки з правил, як завжди?
Ви краще задачу опишіть свою - ми підкажемо, як її насправді треба вирішувати.
Так там не було задачі, мені просто було цікаво чому так:
void f(base *barr) {}
Derived darr[100];
...
f(darr);
працює, а так ні:
void f(base **barr) {}
Derived *darr[100];
...
f(darr);
а так ні:
Бо, тоді у вас з'являється повно геморою. Чому і що це за геморой вам вище описали.
Звісно це може виглядати привабливо, коли у тебе кілька мільйонів елементів в масиві, і замість робити повільне копіювання, є спокуса зробити "каст", але тре розуміти ризики.
Тому що це різні типи. В першому випадку між ними є пряме перетворення: вказівник на нащадка можна перетворити у вказівник на предка; у другому разі перетворення немає.
Про всяк випадок (може, ви це знаєте, але варто ще раз нагадати): успадкування описується відношенням "це такий". Нащадок - це такий предок, для якого визначені додаткові елементи. Кнопка - це такий елемент форми. Яблуко - це такий фрукт. Ціле - це таке число (для мов, де математика реалізована об'єктами). Але масив нащадків - це не "такий масив предків", це, в кращому разі, така колекція нащадків.
Так, дякую, я вже здається майже все зрозумів про що йшлося, зокрема про те, що перетворення там немає. Просто в книжці я не бачив, щоб це пояснювалось.
Для відправлення відповіді ви повинні увійти або зареєструватися