Здратсвуйте уважаемые эксперты? В С++ конструктор объекта вызывается при объявении. А в Delphi как? В книге вролде написано что его наадо вызывать самому. А чем он тогда отличается от обыкновенной процедуры? Если можно пришлите пожелуйста на мыло пример класса с конструктором . заранее спасибо.
Доброе время суток, Vlad! Я уже отвечал на похожий вопрос. Вот копирую свой ответ: ******************* При работе с классами и объектами классов необходима инициализация (выделение памяти, задания начальных значений). Для решения проблемы инициализации и деинициализации существуют функция-конструктор и функция-деструктор. Конструктор обычно используется для задания начального значения переменных объекта, выделения памяти и т.д. Деструктор обычно используется для освобождеия памяти занимаемой объектом. функция конструктор объявляется в классе с помощью ключевого слова constructor, например constructor Create(x, y : integer); функция деструктор объявляется в классе с помощью ключевого слова destructor, например destructor Destroy(); В С++ конструктор объекта вызывается при объявлении объекта. В Delphi же, такого не происходит, и инициализацию
(вызов конструктора) приходится производить самому. Например у нас есть такой класс MyClass: type MyClass = class i,j,k : integer; end; Допустим что при работе с объектом класса MyClass нам всегда нужно задавать начальные значения i,j,k. Мы можем написать так: var MyObject : MyClass; begin MyObject := MyClass.Create; // Вызов родительского конструктора класса TObject для выделения памяти объекту MyObject.i := 5; MyObject.j := 10; MyObject.k := 15; А можем добавить в класс конструктор: type MyClass = class i,j,k : integer; constructor MyClass.Create(_i, _j, _k : integer); end; constructor MyClass.Create(_i, _j, _k : integer); begin i := _i; j := _j; k := _k; end; И проинициализировать наш объект так: var MyObject : MyClass; begin MyObject := MyClass.Create(5,10,15); Думаю смысл конструкторов понятен, хотя
мой пример слабо отражает необходимость конструкторов. Но тем не менее они необходимы всегда, как минимум для выделения памяти объекту. Ответ отправлен: 29.07.2004, 18:15 Отправитель: CrackLab Отвечает THE_PRO
Приветствую Вас, Vlad! Вот вам класс-пример: --------------------------------------------------- type TMyIntClass = class (TObject) private MyInt:Integer; public constructor Create(Val:Interger); overload; function GetMyInt:Integer; procedure SetMyInt(NewVal:Integer); end; constructor TMyIntClass.Create(Val:Interger); begin MyInt := Val end; function TMyIntClass.GetMyInt:Integer; begin Result := MyInt; end; procedure TMyIntClass.SetMyInt(NewVal:Integer); begin MyInt := NewVal; end; --------------------------------------------------- Хоть он и слишком простой но он вам послужит. Ответ отправлен: 30.07.2004, 09:52 Отправитель: THE_PRO Отвечает timmy
Добрый день, Vlad! Объекты объявляются в разделе var: var student:TPerson; Пример с CONSTRUCTORом(чаще всего конструктор называют Create): TPerson = class; private fname: string[15]; faddress: string[35]; constructor Create; {конструктор} public procedure show; {метод} end;
Ответ отправлен: 30.07.2004, 00:15 Отправитель: timmy
Вопрос № 1708
Здравствуйте! Прошу откликнуться тех, кто занимался написанием своего диалап диалера (звонилки). Подробности вопроса по e-mail или по ICQ 136342269. Заранее благодарен всем отклукнувшимся, если таковые найдутся.
Добрый день, Dark_One! Напиши вопрос мне на мыло : ocp@mail.az Ответ отправлен: 30.07.2004, 09:44 Отправитель: THE_PRO
Вопрос № 1710
Здравствуйте уважаемые эксперты. Возникла проблема с переносом программы на другой компьютер. На машине, на которой она компилировалась (Win98, C++ Builder 5.0, BDE 5.01) все работает. На другой машине при попытке использовать TQuery выдается сообщение "Invalid field descriptor. File or directory does not exists. File: <текущий каталог>\_qsql000.dbf. Table does not exists.", причем такого файла действительно нет, а на "рабочей версии" такой файл исправно создается. Этот TQuery делает select из баз FoxPro (без альяса из текущего каталога). В "нерабочей версии" нормально работают другие TQuery, работающие с базой Oracle, а также TTable, работающие с теми же базами FoxPro (тоже без альяса из текущего каталога). Для "неработающей версии": BDE 5.01, Win2000 (с правами администратора) и Win98 (на разных машинах);
с помощью InstallShield установлены "Standard VCL Packages" и "Database Component Packages". Подскажите, что можно сделать. Заранее благодарен.
Ответ отправлен: 31.07.2004, 11:12 Отправитель: Чебуратор Отвечает THE_PRO
Здравствуйте, Alex! Yeshe raz ustanovi BDE, yesli ne srabotayet to poprobuy s aliasami. Ответ отправлен: 30.07.2004, 15:26 Отправитель: THE_PRO
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.