Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi,Описание процедуры

Ответить
Настройки темы
Delphi - Delphi,Описание процедуры

Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как описать процедуру, чтобы в ней были такие параметры, которые можно было бы не задавать при вызове данной процедуры или функции?

[s]Исправлено: Roman Go, 19:12 29-01-2003[/s]

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 19:08, 29-01-2003

 

Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Roman Go
function x(Dummy:Integer=0):Boolean; - покатит?

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

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 20:07, 29-01-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Pascal 4ever


Сообщения: 48
Благодарности: 0

Профиль | Отправить PM | Цитировать


Roman Go
нужно делать несколько функций которые будет прекрывать друг друга

Хотя наверное можно и по другому

[s]Исправлено: fLANkeR, 18:40 7-02-2003[/s]

Отправлено: 18:38, 07-02-2003 | #3


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


#include <stdio.h>
#include <stdarg.h>

/* calculate sum of a 0 terminated list */
void sum(char *msg, ...)
{
  int total = 0;
  va_list ap;
  int arg;
  va_start(ap, msg);
  while ((arg = va_arg(ap,int)) != 0) {
     total += arg;
  }
  printf(msg, total);
  va_end(ap);
}

int main(void) {
  sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0);
  return 0;
}

Пример из Borlandc 3.1

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 00:23, 11-02-2003 | #4


Пользователь


Сообщения: 65
Благодарности: 1

Профиль | Отправить PM | Цитировать


Crew
человек же ведь ясно сказал - Delphi, а значит Паскаль
так фига ты ему С суешь? А вообще vasketsov правильно сказал

-------
Если долго мучиться - что-нибудь заглючиться.
Если долго глючиться - ну... а винду пераставлять не пробовали? :)


Отправлено: 05:54, 20-02-2003 | #5


Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


vasketsov
я так понял ему нужна перегрузка...
что було:
Цитата:
function x(Dummy : Integer=0):Boolean;
и function x():Boolean;
и function x(Dummy : Integer; Dummy2 : Integer):Boolean;
Roman Go
юзай перегрузку...
overload тебе надо... после опредления процедуры пишется... посмотри в справке...
будет типа того:
function x(Dummy : Integer=0):Boolean;
и function x():Boolean; overload;
и function x(Dummy : Integer; Dummy2 : Integer):Boolean; overload;
за ответ точно не уверен, ибо у нас по другому и проще

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 10:15, 20-02-2003 | #6


Аватара для Guest

Guest


Профиль | Цитировать


Ork Yason
Перегрузка к опциональным параметрам отношения не имеет.

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

Необязательные параметра приводят только к подстановке неуказанных параметров компилятором дефолтными значениями. Функция остается одна.

А у вас по другому и проще - это где? Ибо и в сях есть и необязательные параметры и перегрузка, причем точно также, как я описал, это общая стандартная (хотя и не стандартизованная) схема.

vasketsov

Отправлено: 17:38, 20-02-2003 | #7


Монголо-татар


Сообщения: 117
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Guest
Цитата:
Перегрузка к опциональным параметрам отношения не имеет.
я понял товарищу нужна перегрузка...
он придет и скажет нам, что ему из вышесказанного нужно...
Цитата:
А у вас по другому и проще - это где? Ибо и в сях
в них самых...
это я тоже про перегрузку...

-------
* * * * * * * * Мы - это наши желания. Зигмунд Фрейд


Отправлено: 09:41, 21-02-2003 | #8


Старожил


Сообщения: 225
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
я понял товарищу нужна перегрузка...
он придет и скажет нам, что ему из вышесказанного нужно...
Ну блин
Вообще я попробовал и overload и как Васкетсов сказал, для меня более удобной кажется перегрузка и для решения моей задачи она более всего подходит. Хотя и при том и при другом способе можно не задавать какие-то переменные (о чем я и спрашивал)

Код: Выделить весь код
procedure summm2(var m:real; a,b,c:integer; d:integer=0; f:integer=0);
...
procedure Tform1.summm2(var m:real; a,b,c,d,f:integer);
 *begin
 * *m:=(a+b+c+d)*f;
 *end;
Дело в том что если не указать переменную f, то она примет значение равное нулю и при любых значениях a,b,c,d ответ будет ноль, что может быть не всегда правильно, учесть этот недостаток можно с помощью перезагрузки, проще говоря пищется несколько процедур с одинаковым именем, но с разным содержанием, а какая будет выполняться определяется по заданным параметрам, и если я допустим f же не задам то я могу выполнять другое арифметическое действие, которое описанно в соответствующей процедуре.

Код: Выделить весь код
procedure summm(a,b,c:integer; var m:integer); overload;
 *private
 * *{ Private declarations }
 * *procedure summm(a,b:integer; var m:integer); overload;
...

impletation
{$R *.DFM}

procedure tform1.summm(a,b:integer; var m:integer);
 *begin
 * *m:=a+b;
 *end;
procedure tform1.summm(a,b,c:integer; var m:integer);
 *begin
 * *m:=a+b+c;
 *end;

procedure TForm1.Button1Click(Sender: TObject);
 * *var q:integer;
begin
 *summm(5,5,5,q); *{q=15}
 *summm(5,5,q); *{q=10}
end;
Арифметическое действие не такое как в первом куске кода, но как действует будет думаю понятно, задал три переменных он складывает три переменные, задал две переменные он складывает две переменные (две, а не две и плюс к ним же ноль, что принципиально отличается от метода где не используется перегрузка)

Хотя здесь тоже есть свое недостатки, допустим у меня есть процедура, выходными данными которыми является несколько переменных (a,b,c) если мне нужно чтобы присутствовала только одна переменная допустим "с", "b" или "a", то тут может появиться проблема, как указать так чтобы находилась именно нужная мне Короче говоря в некоторых случаях проще не париться а написать еще одну процедуру просто с другим именем и все, проще говоря каждому самому решать каким путем идти
ну блин

[s]Исправлено: Roman Go, 17:57 21-02-2003[/s]

-------
Нет такой плохой ситуации, которая не могла бы стать еще хуже.


Отправлено: 17:55, 21-02-2003 | #9


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Dread Knight
Цитата:
Crew
человек же ведь ясно сказал - Delphi, а значит Паскаль
так фига ты ему С суешь? А вообще vasketsov правильно сказал
Действительно, но можно было и поспокойней ответить.

А вот меня раньше очень вопрос донимал, но потом я забыл про него -  Можно ли написать dll на С++ с функцией, аналогичной той, что я привел, а потом вызывать ее из Delphi и чтобы она продолжала работать с переменным количеством аргуиментов?

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 01:16, 23-02-2003 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi,Описание процедуры

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сбой при удаленном вызове процедуры Andrushind Microsoft Windows NT/2000/2003 4 15-09-2013 18:38
C/C++ - Перевод процедуры с Pascal на C++ Snake750 Программирование и базы данных 56 05-04-2011 09:39
Использование - Возврат процедуры активации Windows XP Craager Лицензирование продуктов Microsoft 6 06-03-2009 15:22
Вызов процедуры ToX Программирование и базы данных 10 24-07-2004 00:11




 
Переход