Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как проинициализировать объект по указателю на него?  (Прочитано 15990 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugrita
Помогающий

ru
Offline Offline

« : 21-06-2011 08:09 » 

В данном случае работаю в PascalABC
Пусть задан класс Tprep
Код:
type Tprep=class(rabotnik)
   kol: integer;
   constructor Create(Fam:string;nkaf:integer;st:integer;kl: integer);
end;
...
type  Pprep =^Tprep;
var p:Pprep;
begin
new(p,Tprep.Create('Ivanov I.I.',1,30000,1));//так говорит, что неверное кол-во параметров
...
известно что оператор new(p); создаст объект, но не проинициализирует
приводится часто такая схема New(p, Init);
Но в Pascal ABC вместо Init конструктор Create с параметрами
Разумеется у меня есть в запасе и работает способ инициализации не по указателю а по объекту
Код:
var  pr:Tprep;
  pr:=Tprep.Create('Ivanov I.I.',1,1);
- это работает.
Будет ли какая нибудь разница этих 2-х способов при многократном пользовании объектом pr ?
Скажем для создания нескольких экз объектов и запихивания в контейнер?
В частности, как освобождать память?
« Последнее редактирование: 21-06-2011 08:44 от eugrita » Записан
zubr
Гость
« Ответ #1 : 21-06-2011 09:23 » 

В Object Pascal переменная типа класс является указателем на объект класса.  Естественно можно многократно создавать объект типа Tprep, используя переменную var  pr:Tprep;, только надо куда то сохранять указатели на вновь созданные объекты, чтобы потом можно было их удалить.
К примеру, можно для этих целей использовать TObjectList или TList или даже TStringList.
Записан
eugrita
Помогающий

ru
Offline Offline

« Ответ #2 : 21-06-2011 12:55 » 

ну и среда Pascal ABC 3.1 - не поддерживает виртуальных метов ключ.сл. virtual вызывает у нее отторжение.Зато inherited поддерживает.
Может в ABC.Net это исправлено. Но мне надо делать прогу на Pascal ABC 3.1
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 22-06-2011 08:22 » 

что вы имеете в виду, объявляя тип PPrep, как указатель на класс TPrep? любой экземпляр класса сам по себе является указателем, разве в АВС это не так?

попробуйте просто:

Код:
var p: Tprep;
begin
  p := new Tprep.Create('Ivanov I.I.', 1, 30000, 1);
  ..
Записан

eugrita
Помогающий

ru
Offline Offline

« Ответ #4 : 22-06-2011 10:59 » 

да. Так и сделал
а вот это
Код:
new(p,Tprep.Create('Ivanov I.I.',1,30000,1));
не работает - ну и черт с ним
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines