(); // destructor for brightred este de asemenea virtual
Paletă [0] = roșu nou; // crea un obiect roșu în heap
paletă [1] = nouă luminată; // creați un obiect strălucitor în heap
paletă [2] = culoare nouă; // crea un obiect de clasă de bază în heap
Utilizând operatorul de ștergere
ștergeți paleta [0]; // apelați destructorul pentru obiectul de clasă roșie
ștergeți paleta [1]; // destructor pentru obiectul clasei luminate
ștergeți paleta [2]; // începe distrugătorul pentru obiectul de culoare de clasă
Cu toate acestea, în cazul în care nici unul dintre destructor nu este declarată virtuală, expresia șterge paleta [0], șterge paleta [1] și a șterge paleta [2] cauza numai destructorul culoarea clasei de baza, care a anunțat o serie de indicii. Acest lucru va duce la distrugerea necorespunzătoare a primelor două elemente care de fapt au avut de tip roșu și brightred. Solicită destructori virtuale sunt asamblate în timpul rulării și obiectele se specifica ce destructor ar trebui să fie numit.
Curs de lucru
Să studieze informațiile teoretice.
În conformitate cu sarcina individuală pe baza lucrării de laborator nr. 22 de a dezvolta un algoritm pentru lucrul cu obiecte de bază și clase derivate folosind indicii pentru clasele de bază și derivate. Dacă este necesar, aduce ierarhia claselor la 3-4 nivele.
Formați programul de pe computer și remediați erorile.
Pregătiți-vă pentru protecția muncii de laborator, studiind întrebările de control pe această temă.
Cerințele pentru conținutul raportului sunt prezentate în lucrarea de laborator nr. 1.
Întrebări de control pentru pregătire și muncă independentă
Ce funcții ale membrilor sunt numite în linie?
Ce funcții ale membrilor sunt numite supraîncărcate?
Ce funcții ale membrilor se numesc înlocuitori?
Ce funcții membre se numesc virtuale?
Denumiți regulile pentru utilizarea pointerilor pentru a lucra cu obiectele BC și PC.
Când este necesară definirea unei funcții virtuale în clasa de bază?
Ce clasă se numește abstract?
Pot crea un obiect al unei clase abstracte?
Ce funcție se numește pur virtual?
Pot seta în timpul compilării ce funcție va fi apelată atunci când se utilizează pointeri pentru a lucra cu obiecte?
Constructorii și distrugătorii pot fi virtuali? Care este cauza?
Cum este plasarea obiectelor de clasă în "heap"?
Cum este alocată și eliberată memoria pentru obiectele create dinamic?
Ce funcție non-virtuală va fi numită în acest caz și de ce?
Pentru ce sau cum sunt clasificate clasele virtuale?