Un constructor care are un argument. Specifică conversia tipului de argument la tipul constructorului. O astfel de conversie de tip este implicit aplicată numai dacă este unică.
Constructorul virtual
Constructorul nu este virtual în sensul unei metode virtuale - pentru ca mecanismul metodelor virtuale să funcționeze, trebuie să executați un constructor care configurează automat tabelul metodei virtuale a acestui obiect.
"Constructorii virtuali" numesc un mecanism similar, dar diferit, prezent în unele limbi - de exemplu, este în Delphi. dar nu în C și Java. Acest mecanism vă permite să creați în prealabil un obiect al oricărei clase necunoscute în două condiții:
Această clasă este descendentă a unei anumite clase (în acest exemplu este clasa TVehicle);
Pe întreaga cale de moștenire de la clasa de bază la cea creată, lanțul de redefinire nu a fost întrerupt. Când suprascrieți o metodă virtuală, sintaxa Delphi necesită cuvântul cheie de suprasarcină. astfel încât funcțiile vechi și noi cu semnături diferite să poată coexista, să suprascrie pentru a înlocui funcția sau să reintroducă pentru a specifica o nouă funcție cu același nume - acesta din urmă este nevalid.
Destructorul este o metodă de clasă specială. Un agent folosit pentru a deinaliza un obiect (de exemplu, eliberarea memoriei).
Destructor în Delphi
destructor Destroy; suprascrie;
În Delphi, toate clasele sunt descendenți ai cel puțin clasei TObject, astfel încât să eliberați în mod corespunzător memoria, trebuie să înlocuiți distrugătorul utilizând directiva de suprascriere.
În Delphi, apelul direct la distrugător este rar folosit. În schimb, utilizați metoda Free.
Metoda Gratuită verifică mai întâi pentru a vedea dacă obiectul distrus există și apoi îl sună pe distrugător. Această tehnică vă permite să evitați erorile care apar atunci când accesați un obiect inexistent.
5. Utilizarea secțiunilor publicului de clasă, protejate, publicate.
Dacă nu este specificat niciun atribut, atunci implicit este presupus publicat. dacă clasa este compilată cu o directivă, altfel aceste componente au atributul public. Pentru o mai mare lizibilitate, se recomandă gruparea componentelor care au aceeași vizibilitate, plasându-le în această ordine: private. protejat, public. publicate și automatizate. Descrierea clasei are următoarea formă:
Componentele private, protejate și publice.
Componentele protejate sunt vizibile peste tot în modulul unde se declară clasa și în orice clasă succesorul, indiferent de modul în care este descrisă clasa moștenitorului. Acest atribut este atribuit acelor componente care doresc să îl pună la dispoziție numai în clasele descendente.
· Indicatori la metode;
· Un set cu un număr de elemente de până la 32 (valori ordinale 0-31);
· Orice tip real cu excepția Real48.
Când adăugați componente într-un formular, Delphi le plasează în secțiunea publicată (acest atribut este utilizat în mod implicit).
Num. întreg; Apelarea compilației compilației: câmpul publicat "Num" nu este un tip de clasă și nici o interfață. Câmpul de acest tip trebuie descris într-o altă secțiune>
Cu privire la problema descrierilor care se suprapun în clasele derivate.
Dacă într-un modul vom descrie, de exemplu, un obiect de tip TControl, atunci componentele protejate ale acestui obiect vor fi inaccesibile, ceea ce este natural. Dacă descriem acum în același modul o clasă derivată din TControl, aceste componente (protejate) vor fi disponibile, de exemplu:
TMyControl = clasa (TControl)
Rețineți că toate componentele sunt disponibile: câmpuri, metode și proprietăți.
De ce se întâmplă acest lucru? Evident, deoarece în modulul în care este descrisă clasa, toate componentele proprii și moștenite (inclusiv private) sunt accesibile. Dacă descrierea clasei TMyControl și a obiectului acestei clase sunt în module diferite, atunci specificatorii de acces încep să funcționeze așa cum ar trebui. În acest caz, este posibilă extinderea scopului proprietăților componente numai datorită re-descrierii lor ca fiind în general disponibilă, de exemplu:
TMyControl = clasa (TControl)
Componente de automatizare.
Vizibilitatea acestor componente este aceeași cu cea a celor publice. Diferența este că pentru componentele automate sunt generate informații de tip Automation, care sunt necesare pentru serverele de automatizare. Componentele de automatizare apar de obicei numai în clasele derivate din clasa TAutoObject declarată în modulul OleAuto. Această clasă, ca și cuvântul automatizat, este destinată numai compatibilității înapoi. Clasa TAutoObject din ComObj nu utilizează cuvântul automatizat. Componentele de automatizare sunt supuse unor limitări, pe care nu le vom localiza aici.
Descrieri viitoare și clase dependente de reciprocitate (Declarații forward și clase dependente reciproc).
Dacă descrierea clasei se termină cu cuvântul de clasă și cu simbolul ";" (punct și virgulă), adică are forma
tip className = clasă;
fără a specifica o clasă părinte sau o listă de componente, atunci aceasta este descrierea de vârf a clasei.
O descriere definitorie a aceleiași clase trebuie făcută în aceeași secțiune a descrierii tipului ca și descrierea de bază. Cu alte cuvinte, nu poate fi nimic între descrierea de vârf și definirea clasei, cu excepția descrierii altor tipuri.
Descrierea de mai sus ne permite să descriem clasele dependente de comunitate. Iată un exemplu:
TFigure = clasa; // Descrierea principală
TFigure = clasă // Descrierea definitivă
Nu confunda descrierea de bază a clasei cu descrierea definitorie a clasei care este o clasă derivată de la TObject, dar pentru care nu este specificată clasa părinte sau dacă este specificată clasa TObject:
TFirstClass = clasa; // Descrierea principală
TSecondClass = clasă // Descriere definitivă
TThirdClass = clasă (TObject); // Descriere definitivă