Консультация № 120685
29.01.2008, 14:29
30.00 руб.
0 2 0
Здравствуйте! По предмету ООП, задали написать программу на объектах (иерархия), т.е чтобы был объект родитель и объекты потомки и т.д.
В приложении моя программа, которую я пытался сдать. Преподаватель её не принял, т.к. в программе не правильно используется деструктор, не работаю с динамической памятью, да и много других ошибок.

Помогите пожалуйста, исправить это программу или дайте хотя бы идею о чем написать новую, и помогите пожалуйста в её написании.

Приложение:
Модуль:unit myobject;interfaceuses crt;type afoto=object firm : string; {proizwoditel} cost : integer; {cena} constructor create; procedure chfirm; procedure chcost; procedure outinf; destructor delete; end; dfoto=object(afoto) megapix : integer; fps : integer; {kolichestvo kadrov v secundu} mem_amount : integer; {ob‘em pamyati} constructor create; procedure chfps; procedure chmema; procedure chmega; procedure outinf;virtual; destructor delete; end; videoc=object(dfoto) ton : string; {TYPE OF NOSITEL} constructor create; procedure chton; procedure outinf;virtual; destructor delete; end;implementationconstructor afoto.create;begin chfirm; chcost;end;procedure afoto.chfirm;var k : byte;begin writeln(‘Введите название фирмы: ‘); writeln(‘1) Kodak‘); writeln(‘2) Зенит‘); writeln(‘3) Casio‘); writeln(‘4) Panasonic‘); writeln(‘5) Sony‘); writeln(‘6) Nikon‘); writeln(‘7) ChinTauHau Zin Do (China)‘); readln(k); case k of 1: firm:=‘Kodak‘; 2: firm:=‘Zenit‘; 3: firm:=‘Casio‘; 4: firm:=‘Panasonic‘; 5: firm:=‘Sony‘; 6: firm:=‘Nikon‘; 7: firm:=‘ChinTauHau Zin Do (China)‘; end;end;procedure afoto.chcost;begin writeln(‘Введите цену: ‘); readln(cost);end;procedure afoto.outinf;begin writeln(‘Камера ‘,firm,‘ за ‘,cost,‘ $‘);end;destructor afoto.delete;begin firm:=‘‘; cost:=0;end;constructor dfoto.create;begin chfirm; chcost; chfps; chmema; chmega;end;procedure dfoto.chfps;begin writeln(‘Введите количество кадров в секунду‘); readln(fps);end;procedure dfoto.chmema;begin writeln(‘Введите количество памяти‘); readln(mem_amount);end;procedure dfoto.chmega;begin writeln(‘Введите количество мегапикселей‘); readln(megapix);end;procedure dfoto.outinf;begin writeln(‘Цифровая камера ‘,firm,‘ за ‘,cost,‘ $‘); writeln(‘Количество памяти : ‘,mem_amount); writeln(‘Мегапиксели : ‘,megapix); writeln(‘Видео FPS : ‘,fps);end;destructor dfoto.delete;begin firm:=‘‘; cost:=0; mem_amount:=0; megapix:=0; fps:=0;end;constructor videoc.create;begin chfirm; chcost; chfps; chmema; chmega; chton;end;procedure videoc.chton;var k : byte;begin writeln(‘Выберите тип носителя:‘); {<-----aaaaaaaaaaaaaa!!!!!!!} writeln(‘1) mini-CD/DVD‘); writeln(‘2) flash memory‘); writeln(‘3) hard disk drive‘); readln(k); case k of 1: ton:=‘mini-CD/DVD‘; 2: ton:=‘flash memory‘; 3: ton:=‘hard disk drive‘; end;end;procedure videoc.outinf;begin writeln(‘Видео камера ‘,firm,‘ за ‘,cost,‘ $‘); writeln(‘Тип носителя : ‘,ton); writeln(‘Количество памяти : ‘,mem_amount); writeln(‘Мегапиксели : ‘,megapix); writeln(‘Видео FPS : ‘,fps);end;destructor videoc.delete;begin firm:=‘‘; cost:=0; mem_amount:=0; megapix:=0; fps:=0; ton:=‘‘;end;beginend.Главная программа:uses myobject, crt;var f1 : afoto; f2 : dfoto; f3 : videoc; chose, a : byte;beginrepeatclrscr;writeln(‘Выбирите объект:‘);writeln(‘1) Камера‘);writeln(‘2) Цифровая камера‘);writeln(‘3) Видео камера‘);writeln(‘4) Выход из программы‘);readln(chose);case chose of1: begin f1.create; repeat clrscr; f1.outinf; writeln(‘Что меняем?‘); writeln(‘1) Фирма‘); writeln(‘2) Цена‘); writeln(‘3) <Обратно в главное меню>‘); readln(a); case a of 1: f1.chfirm; 2: f1.chcost; end; until a=3; f1.delete; end;2: begin f2.create; repeat clrscr; f2.outinf; writeln(‘Что меняем?‘); writeln(‘1) Фирма‘); writeln(‘2) Цена‘); writeln(‘3) FPS‘); writeln(‘4) Количество памяти‘); writeln(‘5) Мегапиксели‘); writeln(‘6) <Обратно в главное меню>‘); readln(a); case a of 1: f2.chfirm; 2: f2.chcost; 3: f2.chfps; 4: f2.chmema; 5: f2.chmega; end; until a=6; f2.delete; end;3: begin f3.create; repeat clrscr; f3.outinf; writeln(‘Что меняем?‘); writeln(‘1) Фирм‘); writeln(‘2) Цена‘); writeln(‘3) FPS‘); writeln(‘4) Количество памяти‘); writeln(‘5) Мегапиксели‘); writeln(‘6) Тип носителя‘); writeln(‘7) <ОБратно в главное меню>‘); readln(a); case a of 1: f3.chfirm; 2: f3.chcost; 3: f3.chfps; 4: f3.chmema; 5: f3.chmega; 6: f3.chton; end; until a=7; f3.delete; end;end;until chose=4end.

Обсуждение

давно
Старший Модератор
31795
6196
29.01.2008, 17:04
общий
<b>New (процедура)</b>Создает новую динамическую переменную и устанавливает на нее указатель. Объявление: Procedure New(Var P : Pointer [, Init : Constructor ]); Режим: Windows, Real, Protected Замечания: Объявление New было расширено, так что теперь она может также инициализировать объект распределенный в куче, если вы передаете конструктор этого объекта как второй параметр, например: New(T, Init(360, 174));Также, обявление New было расширено, чтобы действовать как функция, возвращающая значение указателя. <b>Dispose (процедура)</b>Освобождает место, занятое динамической переменной в памяти. Объявление: Procedure Dispose(Var P : Pointer [ , Destructor ]); Режим: Windows, Real, Protected Замечания: Не должна использоваться совместно с процедурами Mark или Release. Объявление процедуры Dispose, было расширено так, что теперь она может также освобождать память занятую объектом, распределенным в куче, если вы передаете деструктор этого объекта как второй параметр, например: Dispose(P, Done);После обращения к Dispose, значение указателя P становится неопределенным и ссылаться на него является ошибкой.<font color=blue><b>var</b> F1:^afoto;<b>begin</b> new(F1,Create);{создаем динамическую переменную} dispose(F1,Delete);{освобождаем память}</font>
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
29.01.2008, 21:35
общий
Такой метод решения не подходит?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа