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

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

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

> Задачи на знание ООП, (только для Турбо-Паскаля 7.0)
сообщение
Сообщение #1


Гость






Приветствую всех, зашедших в эту тему...

Такая мысль у меня зрела давно, но вот сегодня (по мотивам одного из топиков в разделе Дельфи) я все-таки решил ее материализовать... Если понравится - продолжу smile.gif

Тема создана для того, чтобы помочь начинающим программировать обратить внимание на особенности ООП, которые при написании программы и (казалось бы) "неправильной" ее работе могут вызвать недоумение.

Говорю сразу, сложных задач здесь выкладывать не буду, будут простые задачки с подвохом ( или без, это уже на мое усмотрение smile.gif ), поэтому огромная просьба: НЕ запускайте компилятор... Внимательно посмотрите на код, и попробуйте определить, что будет выведено на экран при его выполнении... Объяснения, почему Вам кажется, что будет именно так, только присветствуются. Но скрывайте посты тегом [SPОILER], чтобы своим ответом не сбивать остальных smile.gif

Значит, задача №1:

type
TA = object
constructor init;

procedure print; virtual;
end;

TB = object(TA)
constructor init;

procedure print; virtual;
end;

constructor TA.init;
begin
writeln('TA.init');
end;
procedure TA.print;
begin
writeln('TA type object');
end;

constructor TB.init;
begin
inherited Init;
writeln('TB.init');
end;
procedure TB.print;
begin
writeln('TB type object');
end;

procedure print(X: TA);
begin
X.print;
end;
procedure print_const(const X: TA);
begin
X.print;
end;
procedure print_var(var X: TA);
begin
X.print;
end;

var obj: TB;
begin
obj.init;
print(obj);
print_const(obj);
print_var(obj);
end.
Запускаем, и на экране появляется...
 К началу страницы 
+ Ответить 

Сообщений в этой теме
volvo   Задачи на знание ООП   23.11.2006 14:01
hiv   Можно и усложнить ;) добавив:type PTA=^TA; proced…   23.11.2006 17:07
klem4   Вот мое предположение: TA.Init TB.Init TA type o…   23.11.2006 18:52
мисс_граффити   ИМХО: Вызываем TB.init, а он по inherited (до тог…   23.11.2006 19:36
klem4   Вот и я рассуждал так же как и мисс_граффити, но …   23.11.2006 20:49
volvo   Андрей, внимательнее... Ты не там ошибся :)   23.11.2006 20:57
klem4   Ну да это я перепутал мальца, но смысл то остается…   23.11.2006 21:08
volvo   Так... Хорошо. Тогда еще одна... Задача №2: :) …   24.11.2006 5:34
Bokul   Классная тема! :good: Т.е. что выведет проц…   24.11.2006 6:43
volvo   Что выведет, например, any_arr.count_each(new(PTfl…   24.11.2006 13:14
Bokul   Она считает количество элементов в массиве any_a…   25.11.2006 5:00
Bokul   В общем не выдержал я решил попробовать скомпилиро…   26.11.2006 2:33
volvo   А я предупреждал: будут простые задачки с [b]подв…   26.11.2006 2:43
мисс_граффити   и мне интересно. просто в тысячный раз скинуть пуз…   26.11.2006 3:41
Bokul   obj_int := new(PTint); obj_int^.Create; Мо…   26.11.2006 4:22
volvo   Не совсем... Компилятор делает медвежью услугу... …   26.11.2006 4:55
Bokul   А это имеет значения в данном случае? Мне кажет…   26.11.2006 5:52
volvo   Ага... Только вот не скомпилируется у тебя с Var п…   26.11.2006 6:06
Bokul   А я уже ответ хотел писать опираясь на это... …   26.11.2006 6:12
volvo   Потому, что при описании procedure count_each(Var …   26.11.2006 6:28
Bokul   Супер, спасибо!!! any_arr.count_each(n…   26.11.2006 6:40
volvo   Смотрим в документацию: [b]TypeOf (function) Retur…   26.11.2006 6:59
Bokul   Уже какой раз пытаюсь написать ответ, постоянно в…   26.11.2006 7:58
volvo   Bokul :no1: Не будет того, что ты написал: Дело в…   26.11.2006 14:05
мисс_граффити   Значит, я слегка увлеклась и obj_int^.Create; .…   26.11.2006 16:41
volvo   мисс_граффити :blink: Да ты что? :) Не будет и эт…   26.11.2006 16:53
мисс_граффити   Расскажешь, как на самом деле?   26.11.2006 17:46
volvo   :yes2: Рассказываю... (здесь описание всех ошибок…   26.11.2006 18:51
мисс_граффити   Добавляем явное "засовывание" в arr[3] …   26.11.2006 19:24
volvo   А что, собственно, вызывает сомнения? Три объекта …   26.11.2006 20:32
мисс_граффити   те же Ptr(DSeg,$1068) соответственно, typeof(…   26.11.2006 20:55
volvo   Ну, естественно... Какой же тип у NIL-а? Вообще-то…   26.11.2006 21:31
мисс_граффити   Ну, естественно... Какой же тип у NIL-а? вот я е…   27.11.2006 2:04
Bokul   Спасибо за ссылку. Т.е. она просто читает это п…   27.11.2006 1:21
volvo   Нет, так не пойдет... Это не выход... Ты не убирае…   27.11.2006 1:45
Bokul   Утечка происходит тогда, когда мы берем больше …   27.11.2006 6:20
volvo   Да... Вот я и не поставил Dispose... Попробуешь сд…   27.11.2006 6:33
Bokul   Это хорошо, а я ищу не знаю что... Ага, тепер…   27.11.2006 6:39
volvo   Я так понял, что мы остановились на таком вызове э…   27.11.2006 6:42
Bokul   any_arr.count_each(new(PTfloat, create )); Ну …   27.11.2006 6:51
volvo   Угу... Молодец... :) А что произойдет с локальной …   27.11.2006 6:56
Bokul   :) Не знаю... :unsure: Добавил: уже знаю, …   27.11.2006 7:02
мисс_граффити   Передавать как константу? procedure count_each(con…   27.11.2006 23:11
volvo   Нет, ребята (и девушки тоже :) ) - так не пойдет..…   27.11.2006 23:26
мисс_граффити   запрет на пользование компилятором в силе? если не…   28.11.2006 1:21
volvo   Нет, теперь на пользование компилятором нет запрет…   28.11.2006 1:30
Bokul   Так что же компилятор делает потом с неизвестны…   28.11.2006 4:38
мисс_граффити   ...и как посмотреть, сколько памяти свободно?   28.11.2006 5:03
volvo   writeln(memavail);   28.11.2006 5:06
Bokul   А я? :10:   28.11.2006 5:18
volvo   А ты - по ссылке, которую я давал раньше, там все …   28.11.2006 5:20
Bokul   Так? type PT = ^T; T = object constructor c…   29.11.2006 5:56
volvo   :no1: Добавление 3-х строк в те участки, в кото…   29.11.2006 6:03
Bokul   Что ж там за строки :blink: У меня максимальная ут…   29.11.2006 6:05
volvo   Bokul, в моем скриншоте содержится скрытая подсказ…   29.11.2006 6:14
Bokul   Все, сдаюсь... Не вижу, где убегают драгоценные ба…   1.12.2006 8:56
volvo   Хорошо... Подсказываю. Вот тут: procedure TArr.se…   1.12.2006 13:16
Bokul   Аааа... Мелькала такая мысль, ну только я ее сразу…   1.12.2006 13:28
volvo   Да? Зато я вижу: допустим, тебе надо создать корте…   1.12.2006 13:35
Bokul   Сделаем, но только через часиков 10 - сейчас сп…   1.12.2006 13:42
Bokul   constructor TArr.init;{добавим некую полезную …   1.12.2006 23:47
volvo   Первый вариант не убирает утечки: добавление тех ж…   1.12.2006 23:55
Bokul   Я не понимаю почему там не возникает ошибки. …   2.12.2006 0:50
volvo   Это ты как определил? Я бы выразился по-другому: T…   2.12.2006 1:15
Bokul   Error 210 Почему Turbo Pascal не видит эту ошиб…   2.12.2006 1:31
Bokul   Извиняюсь, не увидел вопроса После столько часов…   2.12.2006 3:41
Bokul   Надо сделать деструктор объекта T виртуальным, так…   3.12.2006 7:21
Bokul   Или уже никто не заглядывает в эту тему?   4.12.2006 2:13
volvo   Ну, так ты программу-то приаттачь со всеми изменен…   4.12.2006 2:51
Bokul   Вот:   4.12.2006 5:03
volvo   В принципе, почти правильно... Но нужно еще кое-чт…   4.12.2006 17:14
Bokul   А утечек нету? А с 210 я воюю уже давно, даже дог…   5.12.2006 5:02
Bokul   Продолжаю ставить вопросы на которые никто не отве…   6.12.2006 5:14
volvo   Отвечаю... Естественно, вопросом на вопрос: …   6.12.2006 15:58
Bokul   Полностью согласен. :) А как освободить с па…   7.12.2006 5:31
volvo   А вот с этого места, пожалуйста, поподробнее... То…   7.12.2006 5:51
Bokul   В общем я имел ввиду объект с потерянным на него …   7.12.2006 6:04
volvo   А теперь я тебя спрошу: procedure TArr.count_each(…   7.12.2006 6:16
Bokul   Так как 210 ошибка возникает при обращению к вир…   7.12.2006 6:31
volvo   Ты сам себе противоречишь, тебе не кажется? Ты пок…   7.12.2006 6:40
Bokul   Дамм, надо отвыкать использовать универсальное …   7.12.2006 6:57
volvo   Правда? Даже nil не даст тебе там ошибку... Тем бо…   7.12.2006 7:11
Bokul   А существование VMT, гарантирует существование …   7.12.2006 7:23
volvo   :) Кстати, я нашел у тебя еще кое-что не совсем ко…   7.12.2006 13:56
Bokul   Большую толстую ошибку :) Получаем 10 указател…   8.12.2006 8:42
volvo   Я где-то сказал, что он участвует в построении та…   8.12.2006 15:50
Bokul   Спасибо, теоретическая часть укрепилась. :good: Т…   9.12.2006 5:11
volvo   Не совсем... В том фрагменте, который я тебе приве…   9.12.2006 5:43
Bokul   А сначала ведь был Var :wink: В каком смысл…   9.12.2006 6:30
Bokul   Ха, красиво! :good: Я сначала перепутал как…   9.12.2006 11:26
volvo   Я не спрашивал, как обеспечить то, что P будет раб…   9.12.2006 16:45
Bokul   Может, забыл дописать еще пару строчек. Выбирае…   9.12.2006 22:52
Алена   Пока volvo не будет - я продолжу за него, хорошо? …   10.12.2006 5:06
Bokul   Если он и не против, то почему бы и нет :) Подо…   10.12.2006 7:05
Алена   По тому вопросу - правильно, но там он просто ошиб…   10.12.2006 13:46
Bokul   Откуда такая увереность? :wink: Не знаю, то пок…   10.12.2006 23:26
Алена   Еще варианты будут? Если нет, то я добавляю еще о…   10.12.2006 23:36
Bokul   :lol: :lol: :lol: d'accord :) Паскаль, …   11.12.2006 0:13
Алена   А внимательно прочитать предыдущие посты - никак? …   11.12.2006 1:12
Bokul   Вот: type pT=^t; T=object constructor …   11.12.2006 6:47
2 страниц V  1 2 >


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

 





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