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...
Пока на собственное сообщение не было ответов, его можно удалить.