|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi,Описание процедуры |
|
|
Delphi - Delphi,Описание процедуры
|
Старожил Сообщения: 225 |
Профиль | Отправить PM | Цитировать Как описать процедуру, чтобы в ней были такие параметры, которые можно было бы не задавать при вызове данной процедуры или функции?
[s]Исправлено: Roman Go, 19:12 29-01-2003[/s] |
|
------- Отправлено: 19:08, 29-01-2003 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Roman Go
function x(Dummy:Integer=0):Boolean; - покатит? Но после таких параметров не могут идти обычные, и с перегрузкой проблемы, сигнатура должна однозначно идентифицироваться. |
------- Отправлено: 20:07, 29-01-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Pascal 4ever Сообщения: 48
|
Профиль | Отправить PM | Цитировать Roman Go
нужно делать несколько функций которые будет прекрывать друг друга Хотя наверное можно и по другому [s]Исправлено: fLANkeR, 18:40 7-02-2003[/s] |
Отправлено: 18:38, 07-02-2003 | #3 |
Старожил Сообщения: 163
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Crew
человек же ведь ясно сказал - Delphi, а значит Паскаль так фига ты ему С суешь? А вообще vasketsov правильно сказал |
|
------- Отправлено: 05:54, 20-02-2003 | #5 |
Монголо-татар Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
я так понял ему нужна перегрузка... что було: Цитата:
и 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 |
Ork Yason
Перегрузка к опциональным параметрам отношения не имеет. Перегрузка - когда компилятор создает столько функций, сколько ты описал, их даже все экспортировать можно. Внутреннее представление компилятора таково, что по имя функции однозначно определяется по параметрам. Необязательные параметра приводят только к подстановке неуказанных параметров компилятором дефолтными значениями. Функция остается одна. А у вас по другому и проще - это где? Ибо и в сях есть и необязательные параметры и перегрузка, причем точно также, как я описал, это общая стандартная (хотя и не стандартизованная) схема. vasketsov |
Отправлено: 17:38, 20-02-2003 | #7 |
Монголо-татар Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать Guest
Цитата:
он придет и скажет нам, что ему из вышесказанного нужно... Цитата:
это я тоже про перегрузку... |
||
------- Отправлено: 09:41, 21-02-2003 | #8 |
Старожил Сообщения: 225
|
Профиль | Отправить 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; 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
|
Профиль | Отправить PM | Цитировать Dread Knight
Цитата:
А вот меня раньше очень вопрос донимал, но потом я забыл про него - Можно ли написать dll на С++ с функцией, аналогичной той, что я привел, а потом вызывать ее из Delphi и чтобы она продолжала работать с переменным количеством аргуиментов? |
|
------- Отправлено: 01:16, 23-02-2003 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сбой при удаленном вызове процедуры | 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 |
|