Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2012, 05:21   #1
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
Лампочка Классы в Delphi

Приветствую, уважаемые. Нужно решить задачу - на вершине иерархии стек, элементы типа Pointer. Наследники - стек из строк и стек из чисел. Реализовать иерархию.
1 вопрос: Как объявить в классе данные типа record? Объявление, приведенное ниже, довольно коряво и я не уверен в правильности его работы.
2 вопрос: У меня не получается задать тип элементов из класса-наследника, можно ли это вообще сделать средствами Delphi и как?

Пример. Не работающий, к сожалению =(:

Код:
MyStack = class(TObject)
  Head: NodePointer;
public
  constructor Create;
  destructor Destroy;
end;

MyStringQueue=class (MyStack)
public 
  Node: record  value: string;  next: Pointer; end;
  NodePointer: ^Node;  
end;

Последний раз редактировалось Stilet; 01.05.2012 в 11:00.
wertret вне форума Ответить с цитированием
Старый 01.05.2012, 03:15   #2
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Неужели никто не знает?
wertret вне форума Ответить с цитированием
Старый 01.05.2012, 10:51   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Запись нужно описать перед объявлением класса.
s-andriano вне форума Ответить с цитированием
Старый 01.05.2012, 11:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Запись нужно описать перед объявлением класса.
Если у тебя XE то не обязательно:
Код:
type c=class
    r:record
     n:integer;
    end;
end;

var x:c;
begin
 x.r.n:=....
end.
Впрочем не все на новеньких лошадках сидят...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 11:07   #5
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Запись нужно описать перед объявлением класса.
В том-то и дело, что мне нужно сделать класс стек, и подклассы со стеком строк и чисел. То есть, методы обработки стека должны быть в основном классе, а записи - в классах-наследниках.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если у тебя XE то не обязательно:
Код:
type c=class
    r:record
     n:integer;
    end;
end;

var x:c;
begin
 x.r.n:=....
end.
Впрочем не все на новеньких лошадках сидят...
Delphi 7, тут уж как препод решает =(

Последний раз редактировалось Stilet; 01.05.2012 в 11:21.
wertret вне форума Ответить с цитированием
Старый 01.05.2012, 12:05   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от wertret Посмотреть сообщение
В том-то и дело, что мне нужно сделать класс стек, и подклассы со стеком строк и чисел. То есть, методы обработки стека должны быть в основном классе, а записи - в классах-наследниках.
И в чем проблема?
s-andriano вне форума Ответить с цитированием
Старый 01.05.2012, 12:10   #7
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
И в чем проблема?
В первом посте расписал, не получается задать тип элементов для записи из класса-наследника.
wertret вне форума Ответить с цитированием
Старый 01.05.2012, 12:12   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не получается задать тип
Ты его неверно задаешь. В Случаях в Д7 правильно сказали: описывай тип записи выше класса, где будешь использовать его. Описывай его отдельно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2012, 12:34   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

И, кстати, в данном случае правильно описывать именно ДО. Т.к. эта структура фигурирует в разделе public. Вот если бы она был в private, тогда по идеологическим соображениям ее не следовало бы выносить на всеобщее обозрение.
s-andriano вне форума Ответить с цитированием
Старый 01.05.2012, 13:16   #10
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Хмм, может, я неправильно понимаю условие? Нужно реализовать иерахию - на вершине стек, его элементами являются данные типа Pointer. Наследники - стек из строк и стек из чисел.

Как я понимаю, в основном классе нужно описывать методы работы со стеком, а его элементами делать указатели на запись. Сама же запись объявляется в классе-наследнике, и, соответственно, поле значений принимает либо строковый тип, либо целочисленный.

В таком случае объявить запись перед классом не получается, а никакого другого метода реализации я не вижу.
P.S. Извиняюсь за тупость, но действительно не могу ничего сообразить =)
wertret вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы (Delphi) wertret Помощь студентам 5 26.04.2012 18:42
Классы в Delphi. weader4 Общие вопросы Delphi 3 14.02.2011 01:21
Классы в Delphi DomiNik Помощь студентам 8 28.10.2010 00:33
delphi классы Terrance! Помощь студентам 2 27.08.2010 19:31
Классы в delphi МишаК Помощь студентам 1 30.05.2007 07:23