Re[3]: method(obj) то же самое, что и obj.method() ? Что за
От: IB Австрия http://rsdn.ru
Дата: 05.07.07 07:32
Оценка:
Здравствуйте, Perseus, Вы писали:

P> Я же говорил о трансформации ООП->ФП.

Трансформация ООП->ФП, как раз и заключается в том, что все что не нужно выносится в сервисные методы. Просто ФП заставляет задуматься, действительно ли метод в классе нужн. Никто не призывает убирать из класса все, но если в процессе разборки с классом выяснилось, что методы ему не нужны, то ничего страшного в этом нет.

P>Это вообще к чему?

К полиморфизму...

P>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?

Не придется. Я не зря писал про двойную диспетчерезацию и визиторы.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[3]: method(obj) то же самое, что и obj.method() ? Что за
От: dr.Chaos Россия Украшения HandMade
Дата: 05.07.07 07:48
Оценка:
Здравствуйте, Perseus, Вы писали:


LP>>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.

IB>>Хм...
IB>>Method(A a)
IB>>Method(B b)

P>Это вообще к чему?

P>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?


Гхм... Зачем? Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.

Виртуальные функции обеспечивают механизм параметрического полиморфизма.

Но это лишь особенность реализации полиморфизма в конкретном семействе языков. В Haskell'е для этого используются классы типов. Они являются единым механизмом для обоих видов полиморфизма.

Было интересное обсуждение BulatZigansin довольно хорошо объяснил различие м-ду механизмом виртуальных функций и классами типов здесь
Автор: BulatZiganshin
Дата: 06.06.07
.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[7]: method(obj) то же самое, что и obj.method() ? Что за
От: Klapaucius  
Дата: 05.07.07 07:52
Оценка: :)
Здравствуйте, aka50, Вы писали:

K>>Вопрос, какие могут быть копии в ФП? Вообще, какие там могут быть объекты?

A>Ну если это jvm/net то вполне себе будут объекты . immutable, но объекты...

Сейчас, наверное, придет Gaperton и скажет, что immutable object — это оксюморон и что это никакой не объект а вовсе даже АТД.
... << RSDN@Home 1.2.0 alpha rev. 677>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[8]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 09:19
Оценка: -1
Здравствуйте, Klapaucius, Вы писали:

K>Здравствуйте, aka50, Вы писали:


K>>>Вопрос, какие могут быть копии в ФП? Вообще, какие там могут быть объекты?

A>>Ну если это jvm/net то вполне себе будут объекты . immutable, но объекты...

K>Сейчас, наверное, придет Gaperton и скажет, что immutable object — это оксюморон и что это никакой не объект а вовсе даже АТД.


Строго говоря, так и есть. Объект только тогда является объектом, когда у него есть СОСТОЯНИЕ, а состояние не может быть не изменяемым. Такой "объект" может быть с легкостью заменен на функцию, возвращающей значение.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[4]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 09:28
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>Здравствуйте, Perseus, Вы писали:



LP>>>>В результате при вызове метода method по интерфейсу I вызовется нужная реализация. Ничего подобного нельзя сделать с функциями.

IB>>>Хм...
IB>>>Method(A a)
IB>>>Method(B b)

P>>Это вообще к чему?

P>>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?


DC>Гхм... Зачем? Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.


Может, хватить путать инстанс объекта с его типом?


class A : public Interface
{
}

class B : public Interface
{
}

void foo(A* object)
{
}

void foo(B* object)
{
}

void test()
{
Interface* object1 = new A();
Interface* object2 = new B();

foo((A)object1);
foo((B)object1);
}


Компилятор требует явного приведения типов при вызове соот.в функции. Т е нужно делать dynamic cast , делать нужный каст и вызывать нужную функцию, что НИЧЕГО ОБЩЕГО С ПОЛИМОРФИЗМОМ НЕ ИМЕЕТ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[4]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 09:47
Оценка:
Здравствуйте, IB, Вы писали:

IB>Здравствуйте, Perseus, Вы писали:


P>> Я же говорил о трансформации ООП->ФП.

IB>Трансформация ООП->ФП, как раз и заключается в том, что все что не нужно выносится в сервисные методы.

Трансформация ООП->ФП заключается в том, что объект напрочь теряет изменяемость состояния. А раз так, НЕ МОЖЕТ БЫТЬ НИКАКИХ ВНУТРЕННИХ МЕТОДОВ, которые, пусть и локально, меняют состояние объекта. Т е все методы выносоятся из класса и объект, собственно, перестает быть объектом, поисходит потеря состояния. Почитайте про концепцию ФП.

IB>Просто ФП заставляет задуматься, действительно ли метод в классе нужн. Никто не призывает убирать из класса все, но если в процессе разборки с классом выяснилось, что методы ему не нужны, то ничего страшного в этом нет.


Почитайте про концепцию ФП.

P>>Это вообще к чему?

IB>К полиморфизму...

Я уже написал, что полиморфизма там нет. Ответ обоснован и потвержден примером.

P>>В данном случае вам придется делать ЯВНОЕ преобразование типа, те с помощью рантаймовой инфы узнавать тип объекта, делать нужный каст и вызывать нужную функцию, либо ловить ClassCastException Какой к черту полиморфизм?

IB>Не придется. Я не зря писал про двойную диспетчерезацию и визиторы.

Двойная диспетчеризация как раз позволяет реализовать перегрузку по инстансу, а не по типу. Никто не спорит, что этот паттерн позволяет эмулировать мультиметоды. Речь совсем о другом. А именно: в соответствии с концепцией ФП при таком подходе теряется понятие объекта как такового. Читайте то, чтоя написал выше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[6]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 09:56
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, Perseus, Вы писали:


P>>Под измененным объектом имеется ввиду измененная КОПИЯ объекта.


K>Вопрос, какие могут быть копии в ФП? Вообще, какие там могут быть объекты?


Объектов в понимании ООП в чистом ФП в самом деле, быть не может. Но посольку я говорил о преобразовании ООП->ФП применительно к общим языкам, то "объект" в данном случае нужно понимать в "аппаратном" смысле если вы поняли, о чем я.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[9]: method(obj) то же самое, что и obj.method() ? Что за
От: Sergey J. A. Беларусь  
Дата: 05.07.07 10:06
Оценка:
Здравствуйте, LaPerouse, Вы писали:

K>>Сейчас, наверное, придет Gaperton и скажет, что immutable object — это оксюморон и что это никакой не объект а вовсе даже АТД.


LP>Строго говоря, так и есть. Объект только тогда является объектом, когда у него есть СОСТОЯНИЕ, а состояние не может быть не изменяемым. Такой "объект" может быть с легкостью заменен на функцию, возвращающей значение.


Интересно было бы посмотреть, как заменить immutable строку (считаную например с консоли) на функцию.

GoJanus для FireFox
Re[5]: method(obj) то же самое, что и obj.method() ? Что за
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 05.07.07 10:20
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>

LP>class A : public Interface
LP>{
LP>}

LP>class B : public Interface
LP>{
LP>}

LP>void foo(A* object)
LP>{
LP>}

LP>void foo(B* object)
LP>{
LP>}

LP>void test()
LP>{
LP>Interface* object1 = new A();
LP>Interface* object2 = new B();

LP>foo((A)object1);
LP>foo((B)object1);
LP>}
LP>


LP>Компилятор требует явного приведения типов при вызове соот.в функции. Т е нужно делать dynamic cast , делать нужный каст и вызывать нужную функцию, что НИЧЕГО ОБЩЕГО С ПОЛИМОРФИЗМОМ НЕ ИМЕЕТ.


Блин, непонятно, зачем ты заладил этот спор. Никто в C++ или Java использовать функциональную нотацию вместо точечной не заставляет. А вот некоторых других языках точечной нотации просто нет, но там использование функциональной нотации не приводит к описанной проблеме. Когда люди говорят про скобочную нотацию, они эти самые языки и имеют в виду.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[5]: method(obj) то же самое, что и obj.method() ? Что за
От: dr.Chaos Россия Украшения HandMade
Дата: 05.07.07 10:45
Оценка:
Здравствуйте, LaPerouse, Вы писали:

DC>>Гхм... Зачем? Помнишь в С++ есть такая штука — перегрузка метода. Те типы принимаемых значений являются частью сигнатуры функции. А компилятор зная тип параметра выбирает нужную функцию. Это и есть специальный(ad hoc) полиморфизм.


LP>Может, хватить путать инстанс объекта с его типом?


LP>

LP>class A : public Interface
LP>{
LP>}

LP>class B : public Interface
LP>{
LP>}

LP>void foo(A* object)
LP>{
LP>}

LP>void foo(B* object)
LP>{
LP>}

LP>void test()
LP>{
LP>Interface* object1 = new A();
LP>Interface* object2 = new B();

LP>foo((A)object1);
LP>foo((B)object1);
LP>}
LP>


LP>Компилятор требует явного приведения типов при вызове соот.в функции. Т е нужно делать dynamic cast , делать нужный каст и вызывать нужную функцию, что НИЧЕГО ОБЩЕГО С ПОЛИМОРФИЗМОМ НЕ ИМЕЕТ.


Ты внимательно прочел что я тебе написал? В случае перегрузки мы имеет 2 сигнатуры функции для разных типов, но имя функции одно и получается что одна функция работает для разных типов, т.е. ведет себя полиморфно. В случае с шаблонами во время компиляции просто генерируется нужная сигнатура на этапе компиляции.

Когда ты передал туда укзатель на интерфейс, ты подразумеваешь не конкретный тип а целое семейство типов, которые обладают общим интерфейсом. Функция работает для этого семейства типов, т.е. ведет себя полиморфно.

А как это сделано, через виртуальные функции или еще как, деталь реализации конкретного инструмента (языка).

ЗЫ Складывается впечатление, что ты считаешь полиморфизмом одну из его реализации.
ЗЫЫ По ссылке ходил?
ЗЫЫ Кроме того ты сам подумай зачем городить такую иерархию с интерфейсом, если все равно работаешь с конкретным типов в итоге? Пример синтетический и ИМХО противоречит использованию foo полиморфно.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[5]: method(obj) то же самое, что и obj.method() ? Что за
От: IB Австрия http://rsdn.ru
Дата: 05.07.07 10:48
Оценка: +2
Здравствуйте, LaPerouse, Вы писали:

LP>Трансформация ООП->ФП заключается в том, что объект напрочь теряет изменяемость состояния.

Такое впечатление, что ты себе вбил в голову какую-то "трансформацию" и теперь пытаешься ее оспорить. В чем проблема-то?

LP>А раз так, НЕ МОЖЕТ БЫТЬ НИКАКИХ ВНУТРЕННИХ МЕТОДОВ, которые, пусть и локально, меняют состояние объекта.

Не ори, если класс получился таким, что в нем не оказалось методов, то, повторюсь, ничего страшного в этом нет.

LP> Т е все методы выносоятся из класса и объект, собственно, перестает быть объектом, поисходит потеря состояния.

LP> Почитайте про концепцию ФП.
Почитай про концепцию ООП. В кратце, суть в следующем: Есть объекты, для изменения состояния объекты обмениваются сообщениями, те самые "объяеты" с фиксированным состоянием и отсутствием методов и есть "сообщения", которыми объекты обмениваются. Та же конструкция, только в профиль, что тебя здесь пугает?

LP>Я уже написал, что полиморфизма там нет. Ответ обоснован и потвержден примером.

Каким примером? "В данном случае вам придется делать ЯВНОЕ преобразование типа..." — весь твой пример.
Так вот, не придется.

LP>Двойная диспетчеризация как раз позволяет реализовать перегрузку по инстансу, а не по типу.

Ну здрасьте...

LP>Никто не спорит, что этот паттерн позволяет эмулировать мультиметоды. Речь совсем о другом.

Именно об этом. Ты утверждал, что если мы выносим функцию наружу и пытаемся работать через обобщенный интерфейс, то нам стопудово придется делать даункаст, так вот ничего подобного — этот паттерн позволяет даункаста избежать.

LP> А именно: в соответствии с концепцией ФП при таком подходе теряется понятие объекта как такового.

Ничего не теряется. Просто ООП несколько шире чем ты привык думать... Это все-таки больше подход к роектированию, чем просто классы с методами.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[10]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 10:50
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

LP>>Строго говоря, так и есть. Объект только тогда является объектом, когда у него есть СОСТОЯНИЕ, а состояние не может быть не изменяемым. Такой "объект" может быть с легкостью заменен на функцию, возвращающей значение.


SJA>Интересно было бы посмотреть, как заменить immutable строку (считаную например с консоли) на функцию.


Вы это к рантайму прикопались? Если это так, то никто не мешает генерить функцию в рантайме. Суть ведь совсем не в низкоуровневой реализации процесса. Суть в определении понятия состояния.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[6]: method(obj) то же самое, что и obj.method() ? Что за
От: LaPerouse  
Дата: 05.07.07 11:09
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>Ты внимательно прочел что я тебе написал? В случае перегрузки мы имеет 2 сигнатуры функции для разных типов, но имя функции одно и получается что одна функция работает для разных типов, т.е. ведет себя полиморфно. В случае с шаблонами во время компиляции просто генерируется нужная сигнатура на этапе компиляции.


DC>Когда ты передал туда укзатель на интерфейс, ты подразумеваешь не конкретный тип а целое семейство типов, которые обладают общим интерфейсом. Функция работает для этого семейства типов, т.е. ведет себя полиморфно.


Ну сколько можно... То, очем ты говоришь, работает, если ТИП объекта СОВПАДАЕТ с его ЭКЗЕМПЛЯРОМ. Но и не это главное. Главное — то, что эти две функции — совершенно разные, у них сигнатура разная и говорить о том, что у тебя там полиморфизм смешно. Т к к ним применяются аргументы совершенно разных типов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[7]: method(obj) то же самое, что и obj.method() ? Что за
От: dr.Chaos Россия Украшения HandMade
Дата: 05.07.07 11:12
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>Здравствуйте, dr.Chaos, Вы писали:


DC>>Ты внимательно прочел что я тебе написал? В случае перегрузки мы имеет 2 сигнатуры функции для разных типов, но имя функции одно и получается что одна функция работает для разных типов, т.е. ведет себя полиморфно. В случае с шаблонами во время компиляции просто генерируется нужная сигнатура на этапе компиляции.


DC>>Когда ты передал туда укзатель на интерфейс, ты подразумеваешь не конкретный тип а целое семейство типов, которые обладают общим интерфейсом. Функция работает для этого семейства типов, т.е. ведет себя полиморфно.


LP>Ну сколько можно... То, очем ты говоришь, работает, если ТИП объекта СОВПАДАЕТ с его ЭКЗЕМПЛЯРОМ. Но и не это главное. Главное — то, что эти две функции — совершенно разные, у них сигнатура разная и говорить о том, что у тебя там полиморфизм смешно. Т к к ним применяются аргументы совершенно разных типов.


Тогда ответь пожалуйста, что такое полиморфизм. Своими словами в вики не лезть .
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[2]: method(obj) то же самое, что и obj.method()?
От: Klapaucius  
Дата: 05.07.07 12:06
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>А при чём тут pattern matchin?


Об этом, в свое время, если мне память не изменяет, много говорилось здесь
Автор: Курилка
Дата: 22.10.04
... << RSDN@Home 1.2.0 alpha rev. 677>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: method(obj) то же самое, что и obj.method() ? Что за
От: Sergey J. A. Беларусь  
Дата: 05.07.07 12:21
Оценка:
Здравствуйте, LaPerouse, Вы писали:

SJA>>Интересно было бы посмотреть, как заменить immutable строку (считаную например с консоли) на функцию.


LP>Вы это к рантайму прикопались? Если это так, то никто не мешает генерить функцию в рантайме. Суть ведь совсем не в низкоуровневой реализации процесса. Суть в определении понятия состояния.


Я собственно не вижу причин почему объекты с состоянием нельзя хранить в виде ф-ий.

GoJanus для FireFox
Re[8]: method(obj) то же самое, что и obj.method() ? Что за
От: Perseus  
Дата: 05.07.07 19:22
Оценка: -4
Здравствуйте, dr.Chaos, Вы писали:

DC>Здравствуйте, LaPerouse, Вы писали:


LP>>Здравствуйте, dr.Chaos, Вы писали:


DC>>>Ты внимательно прочел что я тебе написал? В случае перегрузки мы имеет 2 сигнатуры функции для разных типов, но имя функции одно и получается что одна функция работает для разных типов, т.е. ведет себя полиморфно. В случае с шаблонами во время компиляции просто генерируется нужная сигнатура на этапе компиляции.


DC>>>Когда ты передал туда укзатель на интерфейс, ты подразумеваешь не конкретный тип а целое семейство типов, которые обладают общим интерфейсом. Функция работает для этого семейства типов, т.е. ведет себя полиморфно.


LP>>Ну сколько можно... То, очем ты говоришь, работает, если ТИП объекта СОВПАДАЕТ с его ЭКЗЕМПЛЯРОМ. Но и не это главное. Главное — то, что эти две функции — совершенно разные, у них сигнатура разная и говорить о том, что у тебя там полиморфизм смешно. Т к к ним применяются аргументы совершенно разных типов.


DC>Тогда ответь пожалуйста, что такое полиморфизм. Своими словами в вики не лезть .


Полиморфизм в применении к ООП — это свойство объектов реагировать по-разному на одно и то же входное воздействие. А сейчас я объясню более подробно, какую логическую ошибку совершаешь ты.

Вот кусок примера, который я приводил выше:

Interface* object1 = new A();
Interface* object2 = new B();

foo((A)object1);
foo((B)object2);

Какой тип у object1? Interface! Какой же экзепляр соответсвует object1 на этапе выполнения? A! (в смысле экземпляр класса А). Компилятор подбирает сответствующую сигнатуру по ТИПУ объекта. Твоя проблема в том, что ты не понимаешь, что foo(A* a) и foo(B* a) — совершенно разные функции, и поиск нужной сигнатуры при вызове ничем не отличается от вызова любой другой ф-ции. Тебя смущает одинаковые название ТЕЛА этих ф-ций. А между прочим, компилятору реально пофиг на тело, он отличает ф-ции только по сигнатуре. Предположим, мы назвали наши ф-ции по-разному

foo1(A* a)
foo2(B* a)

Тогда вызов foo1(new A()) ты тоже сочтешь полиморфным?

Тебе, очевидно, привденный выше пример представился в таком свете:

A* object1 = new A();
B* object2 = new B();

foo(object1);
foo(object2);

Вот тут, действительно, компилятор выберет нужную сигнатуру, только это не будет связано ни с каким полиморфизмом. Это будет связано банально с совпадением сигнатур, не более того Совпадение имен ф-ций как раз тебя и запутало.

В случае с виртуальными ф-циями, их сигнатуры совпадают. Как же компилятор находит нужную реализацию для вызова? Очень просто, используя информацию времени выполнения о КЛАССЕ, которому принадлежит ЭКЗЕМПЛЯР объекта.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: method(obj) то же самое, что и obj.method() ? Что за
От: Perseus  
Дата: 05.07.07 19:25
Оценка:
Опять же, сегодня, как и вчера Perseus — это LaPerouse. Извините за такую неувязку, так получилось, что на работе и дома разные аккаунты.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[12]: method(obj) то же самое, что и obj.method() ? Что за
От: Perseus  
Дата: 05.07.07 19:37
Оценка: +1 :)
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, LaPerouse, Вы писали:


SJA>>>Интересно было бы посмотреть, как заменить immutable строку (считаную например с консоли) на функцию.


LP>>Вы это к рантайму прикопались? Если это так, то никто не мешает генерить функцию в рантайме. Суть ведь совсем не в низкоуровневой реализации процесса. Суть в определении понятия состояния.


SJA>Я собственно не вижу причин почему объекты с состоянием нельзя хранить в виде ф-ий.


Прямо фантастика какая-то в стиле Г. Лавкрафта.
Как же это выглядит, если не секрет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: method(obj) то же самое, что и obj.method() ? Что за
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.07.07 19:40
Оценка: +3
Здравствуйте, Perseus, Вы писали:


P>Вот кусок примера, который я приводил выше:


P>Interface* object1 = new A();

P>Interface* object2 = new B();

P>foo((A)object1);

P>foo((B)object2);

P>Какой тип у object1? Interface! Какой же экзепляр соответсвует object1 на этапе выполнения? A! (в смысле экземпляр класса А). Компилятор подбирает сответствующую сигнатуру по ТИПУ объекта. Твоя проблема в том, что ты не понимаешь, что foo(A* a) и foo(B* a) — совершенно разные функции, и поиск нужной сигнатуры при вызове ничем не отличается от вызова любой другой ф-ции. Тебя смущает одинаковые название ТЕЛА этих ф-ций. А между прочим, компилятору реально пофиг на тело, он отличает ф-ции только по сигнатуре. Предположим, мы назвали наши ф-ции по-разному


По-моему ты запутался, Interface* — это тип указателя/ссылки, когда как у объекта, на который этот указатель/ссылка указывает, тип будет A. В традиционных языках нет диспетчеризации в рантайме по параметрам функции (в отличие, от лиспа, к примеру) и единственный метод — vtbl, но есть перегрузка, т.е. диспетчеризация времени компиляции, а там известен лишь тип ссылок, а не "живых" объектов. Ну а vtbl есть лишь один метод перегрузки, причём самый, имхо, простой, понятный, ну и эффективный.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.