21

Re: Перетворення масива наслідників до базового?

Так-с, на це потрібен час, щоб з цим жити далі. Я вірно розумію, що так краще не робити, але бувають вийнятки з правил, як завжди?

22

Re: Перетворення масива наслідників до базового?

Ви краще задачу опишіть свою - ми підкажемо, як її насправді треба вирішувати.

23

Re: Перетворення масива наслідників до базового?

Так там не було задачі, мені просто було цікаво чому так:

void f(base *barr) {}

Derived darr[100];
...
f(darr);

працює, а так ні:

void f(base **barr) {}

Derived *darr[100];
...
f(darr);
Подякували: leofun011

24 Востаннє редагувалося wander (04.02.2020 13:17:20)

Re: Перетворення масива наслідників до базового?

mimik написав:

а так ні:

Бо, тоді у вас з'являється повно геморою. Чому і що це за геморой вам вище описали.

Звісно це може виглядати привабливо, коли у тебе кілька мільйонів елементів в масиві, і замість робити повільне копіювання, є спокуса зробити "каст", але тре розуміти ризики.

Подякували: mimik1

25

Re: Перетворення масива наслідників до базового?

Тому що це різні типи. В першому випадку між ними є пряме перетворення: вказівник на нащадка можна перетворити у вказівник на предка; у другому разі перетворення немає.
Про всяк випадок (може, ви це знаєте, але варто ще раз нагадати): успадкування описується відношенням "це такий". Нащадок - це такий предок, для якого визначені додаткові елементи. Кнопка - це такий елемент форми. Яблуко - це такий фрукт. Ціле - це таке число (для мов, де математика реалізована об'єктами). Але масив нащадків - це не "такий масив предків", це, в кращому разі, така колекція нащадків.

Подякували: mimik1

26

Re: Перетворення масива наслідників до базового?

Так, дякую, я вже здається майже все зрозумів про що йшлося, зокрема про те, що перетворення там немає. Просто в книжці я не бачив, щоб це пояснювалось.