![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте!!! Помогите пожалуйста решить эту проблему. Я объявляю любой класс, и в нем создаю конструктор и деструктор(внутри класса). А проблема в том, что когда я объявляю констр и дестр и запускаю программу оно выд ошибку
Код:
program Project3; {$APPTYPE CONSOLE} uses SysUtils; type TSumma = Class private fx: integer; fy: integer; fz: integer; public constructor Create; Destructor Destroy; end; var v: Summa; begin v:=Summa.Create;// выделяется память для объекта v Summa.Create;// создается конструктор // который присваивает значение к полю класса Summa begin v.fx:=50; end; writeln(v.fx); end. Последний раз редактировалось Admin, 15.04.2012 в 18:25. |
#2
|
||||
|
||||
![]() Код:
program Project1; {$APPTYPE CONSOLE} uses SysUtils; type TSumma = Class private fx: integer; fy: integer; fz: integer; public // constructor Create; // Destructor Destroy; end; var v: TSumma; begin v:=TSumma.Create;// выделяется память для объекта v // Summa.Create;// создается конструктор // который присваивает значение к полю класса Summa // begin v.fx:=50; // end; writeln(v.fx); end. Пишу программы за еду. __________________ |
#3
|
||||
|
||||
![]() Так неправильно:
Код:
Destructor Destroy; ... Summa.Create;// создается конструктор Код:
Destructor Destroy; override; ... v:=TSumma.Create;// выделяется память для объекта v Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
![]() Если убрать слово constructor то она работает. А тогда зачем эти конструкторы деструкторы? Да я понял, что они выделяют память и унижтожают созданный объект.
|
#5
|
|||
|
|||
![]() их добавить, свои действия при создании/удалении
например написать constructor Create(x, y, z: integer); нажать ctrl+shift+c, и в процедуру вписать fx := x; fy ... fz ... writeln(v.fx); не будет работать, т.к. fx в секции private Последний раз редактировалось Pyro, 16.04.2012 в 08:48. |
#6
|
|||
|
|||
![]() Код:
program Project3; {$APPTYPE CONSOLE} uses SysUtils; type Summa = Class private fx: integer; fy: integer; fz: integer; public constructor Creat; end; var v: Summa; p: integer; constructor Summa.Creat; begin fx:=1; fy:=2; fz:=3; end; begin v.fx:=2; writeln(v.fx); end. если writeln(v.fx); то она выводит. А разве скрытым полям так можно присваивать? В си++ было по другому же. Там только чз функции обращались скрытым полям. И смотри еще как в теле конструктора я присвоил значение как их можно вывести тогда? Спасибо тебе за ранее)))))))) Последний раз редактировалось Admin, 17.04.2012 в 09:46. |
#7
|
||||
|
||||
![]() -к private полям можно обращаться из этого же модуля
-закомментируй v.fx:=2; и выведится конструкторское значение Пишу программы за еду. __________________ |
#8
|
||||
|
||||
![]() Вообще-то все проще. Вы декларируете свой конструктор и деструктор но не реализуете их. Вот и ругается компилятор. Есть три решения:
1. Реализовать их 2. Объявить их как абстрактные 3. Не использовать свою реализацию конструктора,деструктора вообще. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |