Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Shaos объясни популярно про Перегруженные функции в C++?
Раньше я сам разбирался в этом вопросе, а сейчас что-то из головы выветрилось... Какая-то там "заподляна" с возвратом что-ли была...
_________________ iLavr
|
25 Feb 2015 14:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Имеется ввиду вот это?
https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 0%B8%D0%B9
Просто разные функции с одним и тем же именем - в Сях это невозможно, а в Плюсах - это одна из основных фич...
|
25 Feb 2015 14:52 |
|
|
ArtemZyev
Junior
Joined: 03 Feb 2016 05:00 Posts: 1
|
Наборы параметров перегруженных функций могут отличаться порядком следования, количеством, типом. Перегрузка функций нужна для того, чтобы избежать дублирования имён функций, выполняющих сходные действия, но с различной программной логикой.
_________________Ведущий поставщик программных обеспечений - http://ru.intechcore.com/
|
03 Feb 2016 05:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Напишу сюда, чтобы не открывать новую тему... Решил я перекомпилировать исходники Pom1 - Apple-1 emulator чтобы избыавиться от вызова MSVCRT100.DLL (я так уже делал с z80.dll), но случилась непонятная мне трабла... Pom1 - Apple-1 emulator использует SDL.dll, а значит у меня есть заголовочный файл SDL.h и куча других заголовочных файлов типа SDL_Хххх.h , где объявлены все функции SDL.dll. При компиляции VC зачем-то "декорирует" имена этих функций префиксом "_", а потом сам же их и не находит... Я так подозреваю, что проблема похожа на обсуждаемую вот здесь: http://forum.developing.ru/archive/index.php/t-10541.htmlНо вот побороть это пока никак не смог...
_________________ iLavr
|
22 Aug 2017 18:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
С-компилятор компилирует в _name, а C++ компилятор в какие-то свои более запутанные крокозябры
если надо чтобы компилятор C++ скомпилировал в _name, то надо чтобы в H-файле у объявлений функций стоял модификатор "C"
P.S. в данном конкретном случае скорее всего либа стыковочная не прилинкована, которая потом будет цеплять SDL.dll
|
04 Nov 2017 17:05 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Напишу здесь, чтобы не открывать лишний топик... Вопрос к Shaos-у. Я тут читаю исходник эмулятора БК-0010, и что-то меня один момент смущает. Ощущение, что автор дважды "перебдел"... В модуле Covox.cpp : Если я правильно понимаю: Т.е. если addr не равен 0177714 то дальше ничего не случится. Но дальше у автора снова: Как-то это странно, но может я чего не понимаю в тонкостях С++ ?
_________________ iLavr
|
13 Jan 2018 07:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
Всё просто - ассерт скомпилируется только в дебаге:) А в релизной сборке его быть недолжно
|
13 Jan 2018 08:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Shaos, у меня что-то Визуал Студия 5.0 ругается на вот такую сточку: говорит: что UINT_PTR нигде не объявлен... что несколько странно... Я посмотрел - все так делают: C++ - Creating a submenuНо с другой стороны сделал поиск на слово UINT_PTR в папке DevStudio - оно не находится... P.S. Что-то мне кажется, UINT_PTR - не для Визуал Студии 5.0... http://vsokovikov.narod.ru/New_MSDN_API/Refer_API/type_date_windows.htmУ меня и файла Basetsd.h нет в DevStudio... Заменил вот так, и оно без ошибок проехало...
_________________ iLavr
|
18 Jan 2018 14:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
видимо он сильно позже появился я помнится на пятой студии ещё на моей старой российской работе программировал - значит это было оооооооочень давно
|
18 Jan 2018 20:35 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Shaos, еще проблемка есть, может знаешь как решить: Я создаю вот это окно " Digital Display" в процессе ATTACH DLL-ки. Его HWND hwnd объявлена внутри как глобальная, и понятно, что когда окно создано, то hwnd его внутри известно. Но когда я вызываю экспортируемую из DLL-ки функцию: То в этой функции hwnd уже неизвестна. Я помню, что Венда каждому процессу, обращающемуся к DLL, создает новую память. Вот как бы значение hwnd не терять при этом?
_________________ iLavr
|
19 Jan 2018 02:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
передай аргументом
|
19 Jan 2018 08:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А некому передать этот аргумент. В вызывающей эту функцию программе Этот вызов как раз прохачен и может сделать только: передавая через стек только свой аргумент ( INT arg) . Поставил пока hMwnd = FindWindow(...), что выглядит как-то натянуто... Искать hwnd собственного окна...
_________________ iLavr
|
19 Jan 2018 11:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
ну тогда можно через реестр передать или на худой конец через файл
|
19 Jan 2018 18:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да ты чо? Мне кажется FindWindow(...) лишний тормоз, хотя по сравнению с записью файл он шустр... а запись в реестр - тоже запись в файл. Это же происходит при каждой выдаче байта в порт! Есть какие-то специальные области памяти для межпотокового общения. Давно читал я и не понял и забыл. Думал, может, ты помнишь...
_________________ iLavr
|
19 Jan 2018 20:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22735 Location: Silicon Valley
|
так тебе только адрес передать через файл, а потом все через этот адрес перекидывать
|
19 Jan 2018 21:25 |
|
|