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 Открыть новую тему 
Ответов
Алена
сообщение 10.12.2006 19:36
Сообщение #2


Гость






Еще варианты будут?

Если нет, то я добавляю еще одно ограничение - на использование nil ... Это слово встречаться в программе не должно (равно, как и приведение к нему, вроде X(Pointer(0)))

Your turn smile.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:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"