|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2012, 00:50 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Правильная перегрузка методов класса.
Доброго времени суток!
Имеется класс-наследник THTTPSend, для него требуется реализовать 3 базовых метода: GET, POST, HEAD, однако только эти 3 мне показалось малым кол-во и нужно сделать ещё удобнее... Код:
Код:
Код:
SS - TStream |
10.11.2012, 02:23 | #2 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Код:
Будь проще и люди к тебе потянутся
|
10.11.2012, 08:27 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
ss - переменная TSTREAM.
А как тогда правильно сделать? Суть в том, что это все функции с булевым результатом, и некоторые должны вернуть данные. Может я вас не правильно понял? Типы out параметров разные, я специально сделал так, чтобы в конечном итоге получившийся класс был очень юзабелен, без собственных приворотных заморочек. Я не знаю почему компилятор не может распознать ситуацию. Код:
Последний раз редактировалось Человек_Борща; 10.11.2012 в 13:30. |
10.11.2012, 13:42 | #4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Хм, ну сделать - то просто, в случае со строкой
Код:
Лучше создать поток до вызова функции, передать его в функцию (модификатор параметра , вроде var out не нужен, лучше const или без модификатора даже), функция его заполняет, после окончания функции пользуемся потоком, и прибиваем его. Булеан результаты функций тут не при чём, нет смысла их трогать. |
10.11.2012, 15:54 | #5 | ||
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Цитата:
Код:
Цитата:
И еще, Человек_Борща, все таки старайся передавать все входные параметры как const, а не так как у тебя в примере - без модификатора...
Будь проще и люди к тебе потянутся
Последний раз редактировалось spamer; 10.11.2012 в 16:05. |
||
10.11.2012, 18:25 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
phomm, spamer, смотрите
Есть методы: Код:
Код:
|
10.11.2012, 22:47 | #7 | |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Цитата:
передавая строку как вар или аут параметр, мы передаём указатель на строку, которая есть указатель на данные строки (ансистроки). Поскольку строка как переменная в подпрограмме локальная, то само значение переменной строки (указателя на данные строки) есть мусор со стека, передав этот мусор (или даже указатель на него) в другую подпрограмму, при попытке изменить данную строку для возврата результата, будет задействован автоматический механизм управления строками в дельфи, т.е. он из старого места (данные строки) попробует строку удалить, а для результата создаст новую строку (в куче) и указателю на строку присвоит адрес созданного блока памяти. Когда он попробует удалить строку по мусорной ссылке, то и может быть ав. Поэтому я и указал, что заниливаем чтобы не было этого, у нилового указателя - переменной пустой строки он не будет пробовать удалить "старую" память. Человек_Борща , я не знаю, как там в синапс ( я так понял Вы её используете), но один и тот же приём Result := HTTPMethod(...); для получения и строки и потока меня настораживает, советую сперва всё перепроверить, в том числе и по справке. Последний раз редактировалось phomm; 10.11.2012 в 23:02. |
|
10.11.2012, 23:04 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
У синапсов нет справки, только унылая техн. документация слизанная с исходников.
Я не пишу новый THTTPSend, я делаю навес над ним, расширяющий возможности. HTTPMethod - единственный метод отправки данных. Я меняю некоторые значения/устанавливаю новые, и вызываю стандартный HTTPMethod. Данные уходят/приходят нормально. Проблема с возвратом их куда-либо, не через результат функции(Функция возвращает успешность отправки данных вообще). |
10.11.2012, 23:27 | #9 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Ах, всё, дошло.. просто меня что-то смутило это...
Пока предположу, что после работы с потоком на чтение (в обоих функциях Get, ибо в обоих работа с потоком) его надо на начало перематывать. Последний раз редактировалось phomm; 10.11.2012 в 23:32. |
10.11.2012, 23:38 | #10 |
Software Developer
Старожил
Регистрация: 19.12.2008
Сообщений: 2,070
|
Насчет очищать/не очищать out-var параметры - можно посмотреть вот тут ответы.
Как-то так: Код:
Будь проще и люди к тебе потянутся
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
перегрузка методов класса (с++) | Antej | Общие вопросы C/C++ | 2 | 24.07.2012 17:58 |
Перегрузка виртуальных методов | mongolores | Общие вопросы Delphi | 27 | 14.05.2012 19:12 |
Ошибка в использовании методов класса | Jugger | Общие вопросы C/C++ | 2 | 26.10.2011 01:29 |
Вектор из callback'ов методов класса | Gongled | Общие вопросы C/C++ | 7 | 05.01.2011 16:29 |
массив методов класса | DartDayring | Общие вопросы C/C++ | 0 | 07.12.2010 20:00 |