@booomheadshot

Delphi. Как оптимизировать создание записей в классе record?

Мне нужно реализовать создание записей в record максимально компактным методом, предположительно, с помощью функций.
Пробовал так:

Код
type
  TDrinker = record
    firstname: string;
    age: integer;
  end;

  TParty = class
    public
      function CreateDrinker(Drinker: TDrinker; fname: string; a: integer): string;

var
  Vasya: TDrinker;

  ........

  TParty.CreateDrinker(Drinker: TDrinker; fname: string; a: integer): string;
  begin
    with drinker do
      begin
        firstname:=fname;
        age:=a;
        result:='Создан участник '+firstname+' с возрастом '+age;
      end;
  end;


Суть в том, чтобы при вызове функции CreateDrinker с параметрами - (Vasya,'Вася Пупкин',21) функция должна вывести в Result информацию о том, что создан участник Вася Пупкин, которому 21 год.

Все бы хорошо, но нужно, чтобы создавалась запись Vasya, которая указана в глобальном var, а создается запись Drinker, которая указана в принимающих параметрах функции CreateDrinker.
Я пытался гуглить, но толком не могу сформулировать проблему, поэтому решил обратиться сюда. Прошу помощи, ибо это важно...
  • Вопрос задан
  • 3042 просмотра
Решения вопроса 2
svd71
@svd71
function CreateDrinker(var Drinker: TDrinker; fname: string; a: integer): string;


указать перед параметром, который нужно изменять в функции, как var.
Ответ написан
Комментировать
Emptyform
@Emptyform
Выносить дринкера в глобальную переменную обязательное условие? Выглядит, извиняюсь, детским садом. Хотя, видимо, ты студент и это учебная задача, да?
Вообще тут напрашивается, что класс Пати порождается от TList и в качестве элементов списка содержит в себе элементы типа Дринкер, которые на лету создаются с помощю New(), хотя и Дринкер хорошо бы сделать классом ...

Ну, ладно, это философия, а что касается проблемы "нужно, чтобы создавалась запись Vasya, которая указана в глобальном var, а создается запись Drinker, которая указана в принимающих параметрах функции CreateDrinker" - немного измени параметры функции - передавай параметр Drinker по ссылке и будет тебе щастье.
TParty.CreateDrinker(var Drinker: TDrinker; fname: string; a: integer): string;

Если бы Дринкер был классом, а не рекордом, то и var писать не нужно было бы - объекты в Дельфи всегда передаются по ссылке.
Внимательно почитай про способы передачи параметров в функции - "по значению" и "по ссылке". Ну и в объектах бы, конечно, надо разобраться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы