Помощь - Поиск - Пользователи - Календарь
Полная версия: ООП. Наследование
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AlonZo
Проблема в том, что программа зависает на сортировке(без работает). Помогите исправить.
А также интересует правильность использования виртуальных методов.
Сама задача: построить объект с полями string, real, integer. Создать массив на основе объекта и отсортировать по полю real. Обязательно использовать виртуальные методы и наследование.
Сам код:
uses crt;
const
	 n=7;
type
	avto=object
			   x:real;
			   y:integer;
			   s:string;
			   constructor init(ss:string; a:real; b:integer);
			   procedure create(ss:string;a:real;b:integer);
			   procedure out;virtual;
			   destructor done;virtual;
	end;
	n_avto=object(avto)
					   constructor init(ss:string; a:real; b:integer);
					   procedure out;virtual;
					   destructor done;virtual;
	end;
	m=array[1..n] of n_avto;
	constructor avto.init(ss:string; a:real; b:integer);
			  begin
				   s:=ss;
				   x:=a;
				   y:=b;
			  end;
	procedure avto.create(ss:string;a:real;b:integer);
			  begin
				   s:=ss;
				   x:=a;
				   y:=b;
			  end;
	procedure avto.out;
			  begin
				   writeln(s:15,x:8:1,y:7);
			  end;
	destructor avto.done;
			   begin
					s:='';
					x:=0;
					y:=0;
			   end;
==============================================================
	constructor n_avto.init(ss:string; a:real; b:integer);
				begin
					 s:=ss;
					 x:=a;
					 y:=b;
				end;
	procedure n_avto.out;
			  begin
				   writeln(s:15,x:8:1,y:7);
			  end;
	destructor n_avto.done;
			   begin
					s:='';
					x:=0;
					y:=0;
			   end;
=======================================================
	procedure sort(var mm:m);
			  var
				 b,i:byte;
				 q:n_avto;
			  begin
				   b:=1;
				   while b=1 do
						 begin
							  b:=0;
							  for i:=1 to n-1 do
							  if mm[i].x>mm[i+1].x
							  then begin
								   q:=mm[i];
								   mm[i]:=mm[i+1];
								   mm[i+1]:=q;
								   b:=1;
							  end;
						 end;
			  end;
==================================================================
var
   mas:m;
   i:byte;
   x1:real;
   y1:integer;
   s1:string;
   f:text;
begin
	 clrscr;
	 assign(f,'input.txt');
	 reset(f);
	 for i:=1 to n do
	 mas[i].init('',0,0);
	 for i:=1 to n do
		 begin
			  readln(f,s1);
			  readln(f,x1,y1);
			  mas[i].create(s1,x1,y1);
		 end;
	 writeln('Ishodnue dannue:');
	 for i:=1 to n do
		 mas[i].out;
	 sort(mas);
	 writeln;
	 writeln('Posle sortirovki:');
	 for i:=1 to n do
		 mas[i].out;
	 for i:=1 to n do
		 mas[i].done;
	 close(f);
	 readkey;
end.
volvo
У тебя объекты не инициализируются (Create - это НЕ конструктор), а ты пытаешься обращаться к виртуальным методам (out)... Что хотел получить кроме зависания?
klem4
код пока не запускал, но volvo, он ведь вызывает конструктор перед вызовом create

for i:=1 to n do
     mas[i].init('',0,0);


volvo
    procedure sort(var mm:m);
              var
                 b,i:byte;
                 q:n_avto; { <--- Это где инициализируется? }

AlonZo
Сделал в сортировке иницилизацию, теперь работает, спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.