constructor ТContFigur.Create();
var i: integer;
begin
inherited Create();
SetLength(MassF, 0);
for i := 0 to Length(MassF)-1 do
begin
SetLength(MassF,Length(MassF)+1);
MassF [Length(MassF)-1]:= MassF[i];
end;
end;
Уже не соображаю ничего
Прежде чем задать  вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
| VEDA | 
                        
			
			  
			
				 Сообщение
					#1				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			constructor ТContFigur.Create(); Уже не соображаю ничего  | 
	
![]() ![]()  | 
	
| Client | 
                        
			
			  
			
				 Сообщение
					#2				
			 
		 | 
	
| 
        	
        		 Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация:    20           	 | 
       
			
			varЕсли массив целочисленный, то там только 1 элемент - ноль. А что там вообще должно быть?  | 
	
| volvo | 
                        
			
			  
			
				 Сообщение
					#3				
			 
		 | 
	
| 
        	
        		 Гость  | 
       
			
			 Цитата Если массив целочисленный, то там только 1 элемент - ноль. С чего бы это? Длина массива = 0, он вообще пустой.Цитата Корректно ли так заполнять массив? Зависит от того, что нужно получить в результате. Ничего противозаконного в таком заполнении нет, но и смысла тоже не видно. | 
	
| Client | 
                        
			
			  
			
				 Сообщение
					#4				
			 
		 | 
	
| 
        	
        		 Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация:    20           	 | 
       
			
			 а да   
			
			
					
		сори, это я вывел количество элементов, а не сами элементы - перепутал...  | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#5				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 Спасибо за ответ! Требуется динамический массив объектов другого класса. Т.е. если правильно понимаю, процедуру добавления объекта в массив нужно объявлять вне конструктора? 
			
			
					
		 | 
	
| Unconnected | 
                        
			
			  
			
				 Сообщение
					#6				
			 
		 | 
	
        	
        		![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация:    24           	 | 
       
			
			 Где хочешь, там и добавляй. 
			
			-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.." 
					
		 | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#7				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 Может так лучше?  Массив все-равно пустой, но длина уже вроде как не от меня зависит      
			
			
					
		Код constructor TContFigur.Create(); var i: integer; figure: TFigure; begin inherited Create(); for i:=0 to Length(MassF)-1 do begin SetLength(MassF,Length(MassF)+1); MassF[Length(MassF)-1]:=figure; end; end;  | 
	
| Client | 
                        
			
			  
			
				 Сообщение
					#8				
			 
		 | 
	
| 
        	
        		 Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация:    20           	 | 
       
			
			MassF[Length(MassF)-1]:=figure;Tfigure это тип объекта, так? значит его надо создать, чтоб закидывать в массив. Цитата но длина уже вроде как не от меня зависит А не проще длину массива передавать как параметр в конструктор? а то зачем-то при каждой итерации все больше и больше памяти выделяется под массив | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#9				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 TFigure создается своим конструктором с параметрами в том же Unit-е. Сам массив это геометрические фигуры отрисованные пользователем на канве (программа получилась типа примитивнейшего Paint). Как тогда лучше передать параметр длины? 
			
			
					
		 | 
	
| Client | 
                        
			
			  
			
				 Сообщение
					#10				
			 
		 | 
	
| 
        	
        		 Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация:    20           	 | 
       
			
			 не совсем то написал.  
			
			
					
		Цитата Tfigure это тип объекта, так а вот 
figureэто локальная переменная. Вот ее и надо создавать. Это имелось ввиду. А насчет длины - можно при запуске программы занулить, а при добавлнеии объектов вызывать метод, который увеличивает счетчик и закидывает в массив нужный объект (полностью инициализированный) Вроде так  | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#11				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 Спасибо. Я постараюсь. Сегодня уже без сил   
			
			
					
		 | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#12				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 объект figure у меня создается на Unit1 (рабочая программа), несчастный MassF заполняется там. Unit2 это как-бы демо с иерархией классов по ООП. Можно ли в таком случае оставить последний вариант конструктора? 
			
			
					
		 | 
	
| TarasBer | 
                        
			
			  
			
				 Сообщение
					#13				
			 
		 | 
	
        	
        		![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация:    62           	 | 
       
			
			 Цитата 
 Что это?! Вы под чем это писали? Вот код, который делает точно то же, что и ваш. 
 Пятачок, выдыхай... --------------------  | 
	
| vlads | 
                        
			
			  
			
				 Сообщение
					#14				
			 
		 | 
	
| 
        	
        		 Гость  | 
       
			
			 Ну, кто должен выдыхать - еще большоооой вопрос. Допустим, это первый запуск. Длина массива = 0. J чему будет равно? Дальше продолжать, или выдохнем и подумаем? 
			
			
					
		 | 
	
| TarasBer | 
                        
			
			  
			
				 Сообщение
					#15				
			 
		 | 
	
        	
        		![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация:    62           	 | 
       
			
			 > Допустим, это первый запуск. Длина массива = 0. 
			
			Тогда этот код вообще не имеет смысла. Я предположил, что код имеет смысл и изначальная длина не ноль. > J чему будет равно? Нулю. И? > Дальше продолжать, или выдохнем и подумаем? Нет, выдохните и подумайте. --------------------  | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#16				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 Ничего не понимаю... Зачем туда j вставлять? Да еще умножать его на 2? 
			
			
					
		 | 
	
| TarasBer | 
                        
			
			  
			
				 Сообщение
					#17				
			 
		 | 
	
        	
        		![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация:    62           	 | 
       
			
			 А вы сами посмотрите, что делает ваш код. 
			
			Пусть длина массива изначально равна N for i:=0 to Length(MassF)-1 do begin Мы N раз (длина массива сразу запоминается) SetLength(MassF,Length(MassF)+1); Увеличиваем длину массива на единицу - то есть длина массива после всего этого удваивается. MassF[Length(MassF)-1]:=figure; А ещё мы N раз присваиваем последний элемент. end; --------------------  | 
	
| VEDA | 
                        
			
			  
			
				 Сообщение
					#18				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Женский Реальное имя: Светлана Репутация:    0           	 | 
       
			
			 Изначально длина массива 0, удвоится может только один раз когда равен 1, и, соответственно +1 будет 2 
			
			
					
		М.б. тогда цикл не нужен? Тогда при создании объекта опять будет вызываться конструктор? Как это происходит? Сообщение отредактировано: VEDA -  | 
	
| TarasBer | 
                        
			
			  
			
				 Сообщение
					#19				
			 
		 | 
	
        	
        		![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация:    62           	 | 
       
			
			 Если изначально длина равна 0, то цикл 
			
			for i:=0 to Length(MassF)-1 do begin не выполнится ни разу. Ничего не произойдёт. А если не ноль, то длина удвоится. Мы эн раз увеличиваем длину на единицу, значит длина увеличивается на эн. --------------------  | 
	
| volvo | 
                        
			
			  
			
				 Сообщение
					#20				
			 
		 | 
	
| 
        	
        		 Гость  | 
       
			
			 Так, VEDA, давайте все-таки уточним, что именно вам необходимо сделать, и что куда передается. Смысла в приводимых тут кодах все меньше и меньше, зачем вообще что-то городить с массивами, если при первой же попытке обращения к содержимому программа вылетит с ошибкой? 
			
			
					
		Откуда в коде берется очередной элемент типа TFigure? Из воздуха? В переменной figure - мусор, ее нельзя никуда присваивать.  | 
	
![]() ![]()  | 
	
 
  | 
		Текстовая версия | 4.11.2025 21:31 |