IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Как передать в функцию переменную любого типа?, как сделать что-то типа readln или writeln, передавая в параметре любу
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 24
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Возникла необходимость написать процедурку, которая будет выводить текст с форматированием относительно окна (по центру, справа, слева и т.п...)... Стандартная процедура ReadLn или WriteLn да и куча им подобных может принимать в качестве параметра переменную любого типа и работать с ней.. можно распечатать и String и Integer... а как объявить свою процедуру, чтобы она могла делать так же?? то есть как не привязывать параметр к определенному типу??
P.S. параметр должен передаваться по ссылке (со словом var).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
на самом деле было больше интересно, как это в паскале реализуется такая вещь.
На самом то деле в Паскале такое реализуется ГОРАЗДО проще, чем ты можешь себе предстаить, только вот почему-то у многих выработался рефлекс: как только видят в программе слово Object - дальше программа не читается... А зря... Смотри:

type
pT = ^T;
T = object
constructor create;
procedure Print; virtual;
end;

pTstring = ^Tstring;
Tstring = object(T)
data: string;
constructor create(s: string);
procedure Print; virtual;
end;

pTinteger = ^Tinteger;
Tinteger = object(T)
data: integer;
constructor create(i: integer);
procedure Print; virtual;
end;

constructor T.create;
begin end;
procedure T.print;
begin end;

constructor Tstring.create(s: string);
begin
inherited Create;
data := s;
end;
procedure Tstring.Print;
begin
writeln('<' + data + '>')
end;

constructor Tinteger.create(i: integer);
begin
inherited Create;
data := i;
end;
procedure Tinteger.Print;
begin
writeln(data:10);
end;

procedure WriteCenter(Obj: pT);
begin
Obj^.Print;
end;

begin
WriteCenter(new(pTinteger, create(2345)));
writeln('');
WriteCenter(new(pTstring, create('This is my text')));
end.

Что, ЭТО не Паскаль? Почему же вы выбрасываете из языка ее самую мощную часть?

 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 11:11
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name