
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (245) « Первая ... 225 226 [227] 228 229 ... 244 245 ( Перейти к последнему сообщению ) |
Сообщ.
#3391
,
|
|
|
Сообщ.
#3392
,
|
|
|
В общем, у нас тут опять то же, что было в многочисленных "тогда"
![]() |
Сообщ.
#3393
,
|
|
|
А где тут базовому классу необходимо знание дочернего? Добавлено Цитата Мяут-Настоящий @ Ну наверное надо было положить элементы раньше: А в джава так можно? Я думал вызов конструктора предка должен быть первым? |
Сообщ.
#3394
,
|
|
|
--Ins--, есть хороший конкретный пример?
|
Сообщ.
#3395
,
|
|
|
Во-первых, пример? Во-вторых, так раз не торчит, то у меня, реализующего наследника, нет никакой необходимости поддерживать двухэтапное контруирование - нет и проблем, о чём я и говорю. Добавлено Цитата --Ins-- @ Потому что это костыль - протектед сеттер только для того, чтобы иметь доступ в конструкторе Костыль - это вызывать методы ещё не созданного или уже разрушенного объекта. |
Сообщ.
#3396
,
|
|
|
Цитата MyNameIsIgor @ Во-первых, пример? Да хотя бы то же Qt. ![]() Цитата MyNameIsIgor @ Во-вторых, так раз не торчит, то у меня, реализующего наследника, нет никакой необходимости поддерживать двухэтапное контруирование - нет и проблем, о чём я и говорю. Скажем так, это может выглядеть не как "двухэтапное конструирование", а как перегрузка тех или иных виртуальных методов. |
Сообщ.
#3397
,
|
|
|
Цитата MyNameIsIgor @ Костыль - это вызывать методы ещё не созданного или уже разрушенного объекта. Нет, костыль - это сеттер спешиал фор конструктор ![]() ![]() ![]() class function CreateMyField: TList; virtual abstract; Ы? |
Сообщ.
#3398
,
|
|
|
Цитата Flex Ferrum @ Да хотя бы то же Qt. Там все классы, которые торчат "наружу" - по сути, фасадные. Я в курсе, но там это сделано для бинарной совместимости. При чём тут двухэтапное контруирование? Цитата Flex Ferrum @ Скажем так, это может выглядеть не как "двухэтапное конструирование", а как перегрузка тех или иных виртуальных методов. Скажем так: переопределение виртуальных методов - это не двухэтапное конструирование. |
![]() |
Сообщ.
#3399
,
|
|
Цитата Мяут-Настоящий @ Ну наверное надо было положить элементы раньше: Не, в джаве это не прокатит, там super должен идти первым выражением. |
Сообщ.
#3400
,
|
|
|
Цитата --Ins-- @ Нет, костыль - это сеттер спешиал фор конструктор Нет, костыль - это вызывать методы ещё не созданного или уже разрушенного объекта. Цитата --Ins-- @ Ну а чтобы я не вызывал методы несозданного объекта, я могу написать свой код так И как абстрактный метод спасает от такого вызова? |
Сообщ.
#3401
,
|
|
|
Цитата MyNameIsIgor @ Я в курсе, но там это сделано для бинарной совместимости. При чём тут двухэтапное контруирование? Ну, скажем так, такой подход позволяет его должным образом использовать и получить все причитающиеся фишки. ![]() Цитата MyNameIsIgor @ Скажем так: переопределение виртуальных методов - это не двухэтапное конструирование. Всё зависит от методов... ![]() |
Сообщ.
#3402
,
|
|
|
Цитата korvin @ Не, в джаве это не прокатит, там super должен идти первым выражением. В принципе можно создать статик метод, возвращающий лист, и передавать его в конструктор, но мне страшно представить как такое будет выглядеть если у нас такое поле не одно, а штук пять-десять Добавлено Цитата MyNameIsIgor @ И как абстрактный метод спасает от такого вызова? Он не только абстрактный, он еще и классовый ![]() Добавлено Цитата MyNameIsIgor @ Нет, костыль - это вызывать методы ещё не созданного или уже разрушенного объекта. А я не вызываю методы объекта ![]() ![]() |
Сообщ.
#3403
,
|
|
|
Цитата Flex Ferrum @ Ну, скажем так, такой подход позволяет его должным образом использовать и получить все причитающиеся фишки. Каким образом pimpl aka bridge помогает получить двухэтапное конструирование? Цитата Flex Ferrum @ Всё зависит от методов... Ну, так пример, пример! Добавлено Цитата --Ins-- @ А я не вызываю методы объекта Метод классовый Т.е. так и запишем: полиморфизм в конструкторах/деструкторах не нужен. ЧТД. |
![]() |
Сообщ.
#3404
,
|
|
Цитата --Ins-- @ А где тут базовому классу необходимо знание дочернего? private поле (а значит, доступное только базовому классу) необходимо заполнять в зависимости от того, какой это на самом деле класс. В конструкторе. Что это, если не требование знать конкретный тип? Добавлено А вот кстати насчет виртуальных статических методов соглашусь - они могли бы быть полезны ![]() |
Сообщ.
#3405
,
|
|
|
Цитата OpenGL @ private поле (а значит, доступное только базовому классу) необходимо заполнять в зависимости от того, какой это на самом деле класс. В конструкторе. Что это, если не требование знать конкретный тип? Где тут требование знать конкретный тип? Базовый класс не оперирует никаким знание о потомках, он обращается только к своему интерфейсу. Чем это принципиально отличается от обычного полиморфного вызова, где базовый класс точно так же делегирует выполнить действие потомку, но при этом дергает за свой интерфейс? Добавлено Цитата MyNameIsIgor @ Т.е. так и запишем: полиморфизм в конструкторах/деструкторах не нужен. ЧТД. Так метод виртуальный ![]() |