![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 02.06.2013
Сообщений: 11
|
![]()
Имеются два класса точка и линия. объекты класса точка являются полем данных класса линия. при вызове конструктора точки все замечательно а вот при вызове конструктора лини все ужасно и плохо. Пожалуйста помогите
Классы Код:
вот тут я вызываю Код:
|
![]() |
![]() |
![]() |
#2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Вы плохо усвоили раздел создания и манипуляции с экземплярами классов.
Код:
А ещё подумайте, что в "клиентском" коде, по нажатию кнопки создающего линию - нет вызова деструкторов для промежуточно созданных экземпляров классов точек, они остаются в памяти и "теряются" при окончании процедуры, для процедуры они локальные переменные. Аналогично и экземпляр линии теряется (локальная переменная) и больше никак с ней взаимодействовать нельзя (потеряна ссылка на сам экземпляр), хотя линия и будет отображаться, т.к. отрисовка её на форме не хзависит от существования экземпляра и ссылки на него. У Вас есть 2 выхода: Сделать конструктор линии таким , чтобы запоминал себе переданные ему экземпляры точек. Код:
Либо перед присвоением в эти поля (типа класса точек ) создать их экземпляр, вызвав конструктор (а также написать деструктор для класса линии, в котором их уничтожать, чтобы не терять память, ну и когда линия больше не нужна вызывать её деструктор). Тогда надо в клиентском коде вызывать деструктор и для точек (ведь они используются только для передачи данных в экземпляр класса линии, после создания которой, они больше не нужны и занимают память (а по выходу из процедуры, указатель на них вообще будет потерян). Также есть и общая проблема - не стоит создавать экземпляры классов в виде локальных переменных, если планируется с ними работа в течение длительного времени, а иначе они существуют только в момент работы кода обработчика кнопки, а после этого будут потеряны ссылки на них (локальные переменные выйдут из области видимости, а они единственные, которые держат ссылку на созданные объекты), и память будет "утекать" |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 02.06.2013
Сообщений: 11
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 02.06.2013
Сообщений: 11
|
![]()
procedure TLine.Show;
begin Form2.PaintBox6.Canvas.Moveto(P1.Ge tX, P1.GetY); Form2.PaintBox6.Canvas.LineTo(P2.Ge tX, P2.GetY); end; не могли бы вы подсказать, как здесь можно решить такую проблему? |
![]() |
![]() |
![]() |
#5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,899
|
![]()
Читать до просветления http://delphikingdom.ru/asp/viewitem.asp?catalogid=1186
Читать мой пост - всё уже расписано и варианты даны. Вызывая line.Show тут Код:
И впредь указывайте, что за проблема у Вас, ведь несложно написать , что система сообщает про Access Violation и указывает на строку кода P1.X:=initP1.GetX; или L1.Show; Последний раз редактировалось phomm; 02.06.2013 в 22:47. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование классов и объектов | Alexander_online | C# (си шарп) | 0 | 21.05.2013 15:50 |
Создание классов и объектов | Xronikov | Помощь студентам | 0 | 25.11.2012 18:57 |
Диаграммы классов и объектов | Belaya_pantera | Помощь студентам | 1 | 12.11.2012 22:01 |
композиция классов с++ | нона | Помощь студентам | 3 | 06.05.2012 12:22 |
Создание классов и использование объектов классов при написании программ в среде C++. | Frozen inside | Помощь студентам | 0 | 16.04.2009 23:18 |