Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы для интервью 
:(
    Опции темы
Vyacheslav
Дата 12.11.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата

перегрузка (overloading) - это создание функций с одним именем но разными наборами параметров в одном неймспейсе

Ну вот вопрос про overloading .  smile 
В каком случае я могу иметь две функции с одним именем и одинаковым набором парамеметров, но с разным типом возвращаемого результата?
И почему этот случай не противоречит выше процитированному определению? ( последний вопрос задается факультативно   smile )

Добавлено @ 20:48
Цитата(J0ker @  12.11.2008,  18:56 Найти цитируемый пост)
вы не поверите, но это правда, и это никакой не дефайн
new(std::nothrow) T;

Вообще это мой факультативный вопрос, который я задаю при первом правильном ответе на первый вопрос  smile 



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
J0ker
Дата 12.11.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Vyacheslav @  12.11.2008,  20:45 Найти цитируемый пост)
В каком случае я могу иметь две функции с одним именем и одинаковым набором парамеметров, но с разным типом возвращаемого результата?

тока в одном - если они в разных неймспейсах либо в разных юнитах и имеют внутренний линкейдж - проще говоря, не видят друг друга
тип возвращаемого параметра не входит в сигнатуру

Цитата(Vyacheslav @  12.11.2008,  20:45 Найти цитируемый пост)
И почему этот случай не противоречит выше процитированному определению?

потому, что заданое вами условие не блещет полнотой


--------------------
user posted image
PM MAIL   Вверх
Vyacheslav
Дата 12.11.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(J0ker @  12.11.2008,  20:51 Найти цитируемый пост)
тока в одном - если они в разных неймспейсах либо в разных юнитах и имеют внутренний линкейдж - проще говоря, не видят друг друга
тип возвращаемого параметра не входит в сигнатуру

Для простоты( хотя это уже подсказка ) это два метода одного класса, имеющие одинаковое название, одинаковый набор ( формально в объявлении  smile  ) параметров, но возвращающие результат разного типа.



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
mes
Дата 12.11.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Vyacheslav @  12.11.2008,  20:57 Найти цитируемый пост)
Для простоты( хотя это уже подсказка ) это два метода одного класса, имеющие одинаковое название, одинаковый набор ( формально в объявлении  smile  ) параметров, но возвращающие результат разного типа.

кажется я чувствую о чем речь. Когда у  одного из методов прараметр this константный ?
только это точно не коректный вопрос.

Цитата(Vyacheslav @  12.11.2008,  20:45 Найти цитируемый пост)
И почему этот случай не противоречит выше процитированному определению? (

противоречит.

Это сообщение отредактировал(а) mes - 12.11.2008, 21:02


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 12.11.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Vyacheslav @  12.11.2008,  20:35 Найти цитируемый пост)
Именно, и собеседование как раз и выявило значительный пробел в понимании различия виртуальных и не виртуальных функций   

ну, то уже другой вопрос. я отвечал именно на 
Цитата(Vyacheslav @  12.11.2008,  18:11 Найти цитируемый пост)
виртуальные функции можно переопределять в производных классах, в отличие невиртуальных.

такое может сказать любой опытный программист, которому просто не приходило в голову засесть за зубрежку терминов smile
это, кстати и ответ на  вопрос
Цитата(J0ker @  12.11.2008,  20:38 Найти цитируемый пост)
причем тут терминология





--------------------
user posted image    user posted image
PM MAIL   Вверх
Vyacheslav
Дата 12.11.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(mes @  12.11.2008,  21:00 Найти цитируемый пост)
кажется я чувствую о чем речь. Когда у  одного из методов прараметр this константный ?
только это точно не коректный вопрос.

Чем? 
Методы класса map
Код

   iterator find (const key_value&);
   const_iterator find (const key_value&) const;

Кстати на него отвечали относительно легко, а кто читал Страуструпа в первом издании и помнил о первом скрытом параметре отвечали и на второй.
Примерно так бы эти методы выглядели после обработки препроцессором в старинном компиляторе, который назывался  "С with classes" , если на том момент кто-нибудь решил реализовать константность метода  smile 
Код

   iterator find (map *This, const key_value&);
   const_iterator find ( const map* This, const key_value&) ;




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Alek86
Дата 12.11.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Vyacheslav @  12.11.2008,  20:57 Найти цитируемый пост)
Для простоты( хотя это уже подсказка ) это два метода одного класса, имеющие одинаковое название, одинаковый набор ( формально в объявлении    ) параметров, но возвращающие результат разного типа.

если ты про шаблоны, то это тоже некорректный вопрос
ибо параметр является частью сигнатуры

Добавлено через 1 минуту и 28 секунд
а, таки про константность... smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Vyacheslav
Дата 12.11.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Alek86 @  12.11.2008,  21:10 Найти цитируемый пост)
такое может сказать любой опытный программист, которому просто не приходило в голову засесть за зубрежку терминов smile

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


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
J0ker
Дата 12.11.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Vyacheslav @ 12.11.2008,  20:57)
Цитата(J0ker @  12.11.2008,  20:51 Найти цитируемый пост)
тока в одном - если они в разных неймспейсах либо в разных юнитах и имеют внутренний линкейдж - проще говоря, не видят друг друга
тип возвращаемого параметра не входит в сигнатуру

Для простоты( хотя это уже подсказка ) это два метода одного класса, имеющие одинаковое название, одинаковый набор ( формально в объявлении  smile  ) параметров, но возвращающие результат разного типа.

непонял, что это был вопрос  smile 
никак наскока я понимаю


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 12.11.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



но при этом надо было хорошо выделить, слово формально
ибо опытные люди сразу вместо "имеющие одинаковое название, одинаковый набор параметров" обычно подставляют слово "сигнатура" smile

Добавлено через 1 минуту и 46 секунд
Vyacheslav, а зачем делать иерархию классов без полиморфизма?

без полиморфизма делаются только наследники от вектора (чтобы потом через полгода на эту чудо-"иерархию" материться)


--------------------
user posted image    user posted image
PM MAIL   Вверх
J0ker
Дата 12.11.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Vyacheslav @ 12.11.2008,  21:13)
Цитата(mes @  12.11.2008,  21:00 Найти цитируемый пост)
кажется я чувствую о чем речь. Когда у  одного из методов прараметр this константный ?
только это точно не коректный вопрос.

Чем? 

тем, что скрытый параметр является параметром, а константность параметра - и как следствие объявление метода const - входит в сигнатуру 
такшо можете вычеркнуть сей вопрос - он некоректен


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 12.11.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



кстати, для этого очень подойдет агрегация, а не наследование
и это, кстати, во всех тех книжках пишется
"если класс НЕ ЯВЛЯЕТСЯ другим классом а только очень похож и меняет некоторое поведение - используйте агрегацию"

Добавлено через 33 секунды
J0ker, там главное слово - ФОРМАЛЬНО smile
я тоже не заметил


--------------------
user posted image    user posted image
PM MAIL   Вверх
J0ker
Дата 12.11.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(Alek86 @  12.11.2008,  21:10 Найти цитируемый пост)
Цитата(Vyacheslav @  12.11.2008,  18:11 Найти цитируемый пост)
виртуальные функции можно переопределять в производных классах, в отличие невиртуальных.

такое может сказать любой опытный программист, которому просто не приходило в голову засесть за зубрежку терминов

не может
ибо тут ошибка не в терминологии, а в принципе
невиртуальные функции-члены переопределяются ничем не хуже виртуальных


--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 12.11.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



J0ker, ты не ответил на вопрос - как в терминологии называется переопределение вирт функций? ибо я, к примеру, не знаю. и называю переопределением именно переопределение вирт функций (странно, но меня при этом все понимают smile )


--------------------
user posted image    user posted image
PM MAIL   Вверх
Vyacheslav
Дата 12.11.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Цитата(Alek86 @  12.11.2008,  21:18 Найти цитируемый пост)
но при этом надо было хорошо выделить, слово формально
ибо опытные люди сразу вместо "имеющие одинаковое название, одинаковый набор параметров" обычно подставляют слово "сигнатура" smile

То есть это Вы не заметили?
Цитата(Vyacheslav @  12.11.2008,  20:57 Найти цитируемый пост)
одинаковый набор ( формально в объявлении  smile  )

И странные у Вас опытные люди: обычные методы не переопределяют, о виртуальных функциях могут мыслить только в терминах наличия-отсутствия таблиц виртуальных функция,  а одинаковый набор параметров сразу же переводят в сигнатуру. Кстати о птичках, формулировку  overloading  в таком виде давал не я. Я ею только воспользовался.  smile

Добавлено через 2 минуты и 45 секунд
Еще вопрос о виртуальных функциях
Можно ли виртуальный деструктор базового класса объявить чистым? 
И если можно, как сделать, чтобы производные от этого не пострадали?




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.