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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Хочу понять ООП. есть задача, что нужно делать и как правильно нужно делать
noskovgleb
сообщение 26.12.2009 19:24
Сообщение #21


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской

Репутация: -  0  +


собственно в FAQ прочитал.
Возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектам иерархии наследования, причем каждый объект может "заказывать" особенность реализации этого действия над "самим собой".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.12.2009 19:30
Сообщение #22


Гость






Хорошо. Прочитал. А понял?

Ты мой код смотрел, из 17-го сообщения, где есть полиморфная процедура Get, которая работает с любым объектом, унаследованным от единого предка? Вот тебе и "особенности реализации действия над самим собой"...
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 26.12.2009 19:49
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской

Репутация: -  0  +


Да... но что делает эта процедура.(?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.12.2009 20:21
Сообщение #24


Гость






Цитата
но что делает эта процедура.(?
А она, собственно, ничего не делает. Она заставляет работать механизм виртуальных функций. В базовом объекте определена виртуальная функция Get, которая "чисто-виртуальная", пользуясь терминологией С++, то есть, не делает ничего вообще. Каждый наследник определяет свою версию этого метода. А потом полиморфная процедура Get заставляет отработать метод Get того объектного типа, который был передан в эту процедуру.
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 27.12.2009 3:17
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской

Репутация: -  0  +


Я извеняюсь Volvo что немогу воспользоваться тем что ты написал... хочеться попробывать свое... или хотябы увидеть то что смогу понять. Еще один вопрос это будет похоже на полиморфим, если да то что здесь не так?
 
program laba15;
type
tm = array[1..5] of integer;
OO = object
m : tm; { object }
kolv : byte; { count of things }
oves : integer; { weight of things }
constructor init(var im:tm);
procedure openbogazh; { open list of thing }
procedure createmassiv(var cm:tm);{ mas of things }
end;
tves = object(OO)
procedure sves(var sm:tm);virtual; { find max weight }
end;
tves2= object(OO)
procedure sves(var sm:tm);virtual;
end;
{---------------------------------------------------------------}
constructor OO.init(var im:tm);
begin
im:=m;
end;
{---------------------------------------------------------------}


{---------------------------------------------------------------}
procedure tves.sves(var sm:tm);
var
i :byte;
summa:integer;
j :byte;
Begin
j:=0;
writeln;
writeln('3десь будем определять кто взял большой вес одежды) ');
writeln;
for i:=1 to 5 do
begin
summa:=summa+sm[i];
inc(j);
end;
for i:=1 to 5 do
if sm[i] > (summa/j)
then writeln(i,'-й пассажир превысил средний вес вещей.');

End;
{--------------------------------------------------------------}
procedure tves2.sves(var sm:tm);
var
i :byte;
sbv:byte;
max:byte;
begin
max:=sm[1];
for i:= 1 to 5 do
if sm[i]>max then
max:=sm[i];
writeln('Найбольший вес вещей = ',max);
readln;

end;
{---------------------------------------------------------------}
procedure OO.openbogazh;
var f : text;
i : byte;
b : byte;
Begin
i:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
write(b:2,' ');
if i=2 then
begin
writeln;
i:=0;
end;
end;
close(f);
End;
{---------------------------------------------------------------}
procedure oo.createmassiv(var cm:tm);
var j : integer;
i : integer;
f : text;
b : byte;
y : byte;
xm: tm;
Begin
writeln;
i:=0;
j:=1;
y:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
if i=2 then
begin
xm[j]:=b;
inc(y);
writeln('ves veshei ',y,
'-ogo passagira ',xm[j],' kg');
cm[y]:=xm[j];
inc(j);
i:=0;
end;
end;
close(f);
End;
(*-------------------- --------------*)
var
BP : OO;
ves:tves;
ves2:tves2;
BEGIN
writeln('--------------------------------------------------');
BP.openbogazh;
BP.createmassiv(BP.m);
ves.sves(BP.m);
ves2.sves(BP.m);
readln;
END.





Добавлено через 1 мин.
и оно какую то ошибку выдает, exit code 210
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.12.2009 9:53
Сообщение #26


Гость






Цитата
Еще один вопрос это будет похоже на полиморфим, если да то что здесь не так?
В каком именно месте? Где здесь у тебя присутствует
Цитата
Возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектам иерархии наследования, причем каждый объект может "заказывать" особенность реализации этого действия над "самим собой".
? Ну, объявил ты виртуальные функции sves в двух типах. И что? Ты посмотри, как ты их вызываешь! У тебя тут виртуальность. и не пахнет. С таким же успехом методы могли быть и НЕвиртуальными. Ты для объекта типа TVes ЯВНО вызываешь TVes.sves, а для объекта типа TVes2 опять же ЯВНО вызывается TVes2.sves.

Еще раз посмотри на мою реализацию процедуры Get. В чем заключается её полиморфность? А в том, что она не знает, объект какого типа будет ей передан, и все равно, когда получает объект, вызывает нужный метод. А ты вызываешь все в явном виде. Это не полиморфизм.

Цитата
и оно какую то ошибку выдает, exit code 210
А ты в FAQ-е точно всё читал? Про то, что при наличии в классе виртуальных методов, ты ОБЯЗАН вызвать конструктор перед обращением к такому методу - тоже читал (там написано совершенно точно, что произойдет при попытке вызвать виртуальный метод ДО вызова конструктора)? Где вызов конструктора в твоем коде?
 К началу страницы 
+ Ответить 

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

 



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