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

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

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

> Задачи на знание ООП, (только для Турбо-Паскаля 7.0)
volvo
сообщение 23.11.2006 10:01
Сообщение #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.
Запускаем, и на экране появляется...
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
volvo
сообщение 7.12.2006 2:40
Сообщение #2


Гость






Ты сам себе противоречишь, тебе не кажется? Ты покажи такой ответ, которого можно добиться... То есть, чтобы ошибка была предсказуемой... Твой предыдущий пост не отвечает на поставленный вопрос, ты вводишь сам себя в заблуждение (так ошибка произойдет на показанной тобой строке, или раньше?) Вот я сейчас могу показать, что надо сделать, чтобы произошла именно ошибка №210, а не немедленное закрытие программы, "неправильная инструкция" или еще что-то в этом роде... Следовательно, я смогу и избежать этой ошибки... Пока ты не научишься ошибки предсказывать - об их исправлении не может быть и речи blum.gif
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 18.07.2025 14:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"