Video: Abstract Class and Pure Virtual function in C++ -51 2024
O clasă abstractă în C ++ este o clasă cu una sau mai multe funcții virtuale pure. Funcția virtuală pură este o funcție virtuală a unui membru care este marcată ca neavând implementare. Cel mai probabil nu are nicio implementare deoarece nu este posibilă implementarea informațiilor din clasă, inclusiv clase de bază.
O functie virtuala conventionala, care nu este pur cunoscuta, este cunoscuta sub numele de functie beton (noteaza ca o functie concreta poate fi virtuala - din pacate, C ++ foloseste acest termen pentru a insemna polimorf.
Sintaxa pentru declararea unei funcții pure virtual este demonstrată în următoarea clasă Account:
// Account - această clasă este o clasă de clasă abstractă Cont {public: Cont (nesemnate accNo, double initialBalance = 0. 0); // funcții de acces nesemnate int accountNo (); dublu acntBalance (); static int noAccounts (); // funcții de tranzacție void deposit (suma dublă); este o funcție virtuală pură retragere virtuală (dublu sumă) = 0; protejat: // păstra conturile într-o listă conectată astfel încât nu există limită // la numărul de conturi static int count; // numărul de conturi nesemnate accountNumber;;};
The = 0 după declarația de retragere () indică faptul că programatorul nu intenționează să definească această funcție. on este un substituent pentru subclasele. Se așteaptă ca subclasele Account să înlocuiască această funcție cu o funcție concretă. Programatorul trebuie să furnizeze o implementare pentru fiecare funcție de membru care nu este declarată pură virtuală.
Unii programatori cred că această notație este prostie. Dar este aici să rămâi, așa că trebuie să înveți să trăiești cu ea. Există un motiv, dacă nu chiar o justificare, pentru această notație. Fiecare funcție virtuală trebuie să aibă o intrare într-o tabelă specială.
Această intrare conține adresa funcției. Probabil, cel puțin la un moment dat, intrarea pentru o funcție pură virtuală a fost 0. În orice caz, este sintaxa cu care te-ai blocat acum.
O clasă abstractă nu poate fi instanțiată cu un obiect; adică nu puteți face un obiect dintr-o clasă abstractă. De exemplu, următoarea declarație nu este legală:
void fn () {// declară un cont cu cont de 100 de cont (1234, 100.00); // aceasta nu este o actiune legala. retragere (50); // ce ați aștepta} // acest apel să faceți?
Dacă declarația ar fi permisă, obiectul rezultat ar fi incomplet, lipsit de anumite capacități. De exemplu, ce ar trebui să facă apelul anterior? Rețineți că nu există niciun cont:: retragere () .
Clasele abstracte servesc ca clase de bază pentru alte clase. Un Cont conține toate proprietățile asociate unui cont bancar generic. Puteți crea alte tipuri de conturi bancare prin moștenirea de la cont.
Termenul tehnic este instanțiat . Spuneți că clasa Cont nu poate fi instanțiată cu un obiect sau un obiect dat instanțiază clasa Economii .