
Алексей
15.06.2018
10:31:30
пошел проверять
ну просто объект потомка может иметь тип родителя (который декларируется, а не фактический тип), это как бы и есть суть наследования
точнее даже не только наследования, но и имплементации интерфейса (тогда тип родителя всегда будет интерфейсом)

Сергей
15.06.2018
10:32:39

kana
15.06.2018
10:32:52
да нет, я серьезно пишу

Google

Дмитрий
15.06.2018
10:33:02

kana
15.06.2018
10:33:12
ну типа я кресты не осилил в свое время

Сергей
15.06.2018
10:33:15
я когда на плюсах писал в существующем проекте, очень охуевал с этого

Алексей
15.06.2018
10:33:19

kana
15.06.2018
10:33:19
слишком много тонкостей

Сергей
15.06.2018
10:33:29
бля
открыл c++ repl
понял сколько нужно заморочек написать, чтобы это запустилось и закрыл

Алексей
15.06.2018
10:34:03

Сергей
15.06.2018
10:34:39

Alexander
15.06.2018
10:34:55

Дмитрий
15.06.2018
10:35:28

Alexander
15.06.2018
10:36:07
это же большая нагрузка, знать, виртуальный ли метод, какой когда вызовется
В компилируемых языках -- никакой. Там для каждого класса создаётся "динамическая таблица типов", и роутится всё за константное время.
А вот что касается нагрузки на *разработчика* -- то да, собственно в этом и вся суть претензий к "сложному" ООП: хрен разберёшься как это работает без поллитры водки и шкурки автора

Сергей
15.06.2018
10:36:14

Google

Алексей
15.06.2018
10:36:16

Сергей
15.06.2018
10:36:32
сириусли?

Алексей
15.06.2018
10:36:47
Не хочу тебя расстраивать

Alexander
15.06.2018
10:36:50

Алексей
15.06.2018
10:37:00
но в C++ структура и класс - это почти одно и тоже

kana
15.06.2018
10:37:09
это шарп

Алексей
15.06.2018
10:37:11
там отличия косметические

kana
15.06.2018
10:37:13
угадайте вывод

Сергей
15.06.2018
10:37:23
давненько я на плюсах не писал
)

Алексей
15.06.2018
10:37:43
вплоть до наследования структур от классов, и классов от структур

kana
15.06.2018
10:37:55
там даже ошибка есть, которая внезапно меняет вывод
госпади как это же это сложно

Alexander
15.06.2018
10:38:21
давненько я на плюсах не писал
так и в том же TS то же будет. Тебе компилятор вежливо скажет, что "так как у родителя в прототипе не хватает вот этого и этого, то ребёнком ему не быть". Это вполне себе универсальное правило

Дмитрий
15.06.2018
10:38:24

Сергей
15.06.2018
10:38:29

Алексей
15.06.2018
10:38:32

Grigorii
15.06.2018
10:38:38
1
2
2

Google

kana
15.06.2018
10:38:55

Дмитрий
15.06.2018
10:39:00

Alexander
15.06.2018
10:39:05

kana
15.06.2018
10:39:05
а если сделать public f, то 1 1 2

Алексей
15.06.2018
10:39:06
явно скастовать конечно же

Grigorii
15.06.2018
10:39:14

kana
15.06.2018
10:39:35
а с override уже ну будет virtual
разные virtual в крестах и не в крестах

Алексей
15.06.2018
10:40:02

kana
15.06.2018
10:40:44
просто варнинг, ошибки нет

Алексей
15.06.2018
10:40:52
ааа
но override - это просто указание больше для программиста, что идёт переопределение виртуального метода

Alexander
15.06.2018
10:41:40
так. Горшочек, не вари! Я не думал, что мой вопрос про разницу типов и значений в TS вызовет обсуждение особенностей полиморфизма разных языков =)

Алексей
15.06.2018
10:41:49
И да, возвращаясь к наследованию.
в языках типа Java и C# вообще без наследования нельзя никак

Дмитрий
15.06.2018
10:42:38

Алексей
15.06.2018
10:42:41
(я имею ввиду конечно же наследование классов, а не имплементацию интерфейсов, что немножко другое)

Дмитрий
15.06.2018
10:43:11

Алексей
15.06.2018
10:43:48
Ну так и в каком-нибудь реакте не получится без наследования фактически

Google

Алексей
15.06.2018
10:44:05
правда его спрятать в HOC можно
но всё таки

Дмитрий
15.06.2018
10:44:17

Сергей
15.06.2018
10:44:57

Алексей
15.06.2018
10:45:04
ну это не магия, хотя на самом деле такое поведение не рекомендуется, и его следует заменить как раз виртуальными методами

Сергей
15.06.2018
10:45:56
когда наследование вырастает до цепочки в 5-6 классов и ты явно не видишь инициализаций

Алексей
15.06.2018
10:45:58
ну тут всё правильно, Foo - родитель, Bar - потомок

Сергей
15.06.2018
10:46:01
так да

Дмитрий
15.06.2018
10:46:03

Alexander
15.06.2018
10:46:07
давно это было =) Да, вот ровно так и можно =)

Сергей
15.06.2018
10:46:21
и у кого

Алексей
15.06.2018
10:46:34
ну вот глубокое наследование как правило как раз и приносит проблемы

Сергей
15.06.2018
10:46:51
я пока не видел больших проектов на плюсах, без него
особенно игровые движки этим грешат

Алексей
15.06.2018
10:47:14
хм
но в принципе на производительность глубокое наследование особо и не влияет
а это для крестовиков самое главное

Дмитрий
15.06.2018
10:48:01

Алексей
15.06.2018
10:48:07
я бы даже сказал "почти не влияет"

Google

Алексей
15.06.2018
10:49:07

Alexander
15.06.2018
10:49:07
Опосредованно -- влияет. У тебя появляется куча кода, которая выполняется просто потому, что "базовый класс недостаточно базовый и несет на себе лишний базовый функционал". И это "просачивается" в наследников.
Кроме того, у тебя появляется ситуация, когда ты не совсем понимаешь, как именно будет вести себя объект, который ты наследуешь -- по тем же причинам -- и ты слишком легко можешь ОШИБИТЬСЯ про оценке

kana
15.06.2018
10:49:53
ведь Object)

Алексей
15.06.2018
10:50:06
не, Object не учитывается
там в основном служебная функциональность и она достаточно редко переопределяется
к тому же в тех же крестах нет Object или другого базового для всех класса
Но вот я не уверен, что хорошо получится, если избавиться от наследования почти полностью, заменив его композицией
по крайней мере не во всех ситуациях точно

Alexander
15.06.2018
10:53:34
блин. Да не бывает серебряной пули, нигде и никогда. Заменить везде по всему миру? Точно говно получится, инфа 100%. Заменить в твоём личном проекте? Ну, покажи проект сначала
Наследование, композиция, включение, ..., много их -- это замечательные инструменты, которыми стоит пользоваться тогда, когда надо. Рассуждать про то, что "молоток лучше гвоздодёра" -- глупо. Использовать молоток вместо гвоздодёра потому, что "молотки -- отстой" -- еще больший идиотизм

Сергей
15.06.2018
10:55:32

Alexander
15.06.2018
10:56:13
динамическая диспетчеризация влияет же
почти нет. Ты вынужден создать по лишней хеш-таблице на каждый тип (не экземпляр!), и всё. Проседания по быстродействию -- +1 JUMP, по памяти тоже несерьёзно

Алексей
15.06.2018
10:56:28

Alexander
15.06.2018
10:56:50
не становится.
(ну, не ты вынужден, а компилятор, разумеется)

Сергей
15.06.2018
10:57:39

Алексей
15.06.2018
10:57:52

Alexander
15.06.2018
10:57:57

Алексей
15.06.2018
10:57:57
или что-то такое

John
15.06.2018
10:58:11
ребята, может есть у кого на примете англоговорящее кромьюнити по ts в телеграме?