Acasă Finanțe personale Clase abstracte și C ++ - dummy

Clase abstracte și C ++ - dummy

Video: ? Programare Orientata pe Obiecte: Cum se folosesc Clasele in Java | Programare in Java #5 2024

Video: ? Programare Orientata pe Obiecte: Cum se folosesc Clasele in Java | Programare in Java #5 2024
Anonim

C ++ suportă întârzierea legării , care este atunci când rezolvă un apel de metodă bazat pe timpul de execuție tip (sau tip dinamic) al obiectului țintă, mai degrabă decât tipul său declarat (sau tipul static). Acest lucru este demonstrat în următorul fragment de cod C ++:

#include utilizând namespace std; clasa Cuptor {public: virtual void cook () {cout << "gătit cu un cuptor" << endl;}}; clasa microundeOven: cuptor public {public: virtual void cook () {cout << "gătit cu un cuptor cu microunde" << endl;}}; void prepareMeal (cuptor și cuptor) {cuptor. cook ();}

În funcția prepareMeal (), apelul în cuptor. bucătar () poate trece în cuptor:: bucătar () sau cuptor cu microunde:: cook () în funcție de timpul de funcționare (tipul "real") al obiectului cuptorului trecut.

Cuvântul cheie virtuală este esențial aici. Fără aceasta, metoda cook () va fi legată mai devreme, pe baza tipului de timp de compilare și va invoca cuptorul:: cook () de fiecare dată. După ce a fost declarat virtual în clasa Cuptor, metoda se presupune a fi virtuală în fiecare subclasă, dar nu rănește să repetați declarația astfel încât cititorii să înțeleagă.

Următorul program simplu demonstrează acest principiu în practică:

int principal () {Cuptor cuptor; prepareMeal (cuptor); Cuptor cu microunde; prepareMeal (mo); retur 0;}

În acest program, apelul pentru gătit () generează două ieșiri diferite în funcție de tipul cuptorului:

Gătit cu un cuptor Gătit cu un cuptor cu microunde

că o metodă din clasa de bază poate fi definită. Luați în considerare cazanul cu mai multă atenție. Există o serie de tipuri diferite de cuptoare - cuptoare convenționale, cuptoare de convecție și cuptoare cu microunde - dar se poate susține că nu există nici un cuptor real care să nu aparțină uneia dintre aceste subclase. Este posibil să puteți spune cum diferite tipuri de cuptoare efectuează operația de preparare a gătitului - adică, ce ar trebui să definească un modul de gătit () și un cuptor cu microunde. Probabil nu este posibil să definiți ce acțiuni ar trebui să fie executate de cuptor:: cook ().

Nu puteți lăsa pur și simplu cuptorul:: cook () nedeclarat într-un limbaj puternic, precum C ++. Cu toate acestea, puteți declara o metodă, dar lăsați-o neimplementată dacă nu există nicio implementare. Se utilizează următoarea sintaxă curioasă:

Cuptor de clasă {public: virtual void cook () = 0;};

Acest cod declară o metodă Cuptor:: cook () care este legat târziu, dar nu implementează metoda. De fapt, merge mai departe spunând că metoda nu va fi pusă în aplicare. În C ++, o astfel de metodă se consideră a fi virtuală pură . Programatorii C ++ utilizează de asemenea termenul preferat în multe alte limbi de calculator puternic tipizate: abstract .Clasa cuptorului este considerată a fi abstractă.

Un rezumat reprezintă o proprietate pe care o cunoașteți clasa posedată, dar nu știți cum să o implementați fără echivoc în clasa actuală.

O clasă este abstractă dacă conține una sau mai multe metode virtuale pure. Semnificația acestui lucru este că nu puteți instanțiza o clasă abstractă. Astfel nu mai sunt permise urmatoarele:

int main () {Cuptor cu cuptor; prepareMeal (cuptor); retur 0;}

Motivul pentru aceasta este simplu: dacă ați creat un obiect de cuptor de clasă și apoi ați încercat să invocați cuptorul. cook (), ce ar trebui să facă compilatorul?

La un nivel mai filosofic, este bine să spunem că există un termen comun denumit Cuptor care descrie cuptoare convenționale și cuptoare cu microunde și cuptoare de convecție. Acest termen Cuptor este un concept obișnuit, deoarece leagă asemănările din toate aceste subclase. Dar nu există nici un exemplu de cuptor care nu este una dintre subclasele cuptorului.

O subclasă a unei clase abstracte este ea însăși abstractă până când toate metodele virtuale pure au fost suprascrise de versiuni non-abstracte (adică beton ). Astfel, clasa MicrowaveOven din fragmentul de cod anterior nu este abstractă - chiar dacă cuptorul a fost abstract - deoarece înlocuiește cook () cu versiunea sa proprie.

Observați că nu este nimic în neregulă cu funcția prepareMeal () definită după cum urmează:

void prepareMeal (cuptor și cuptor) {cuptor. cook ();}

Chiar dacă argumentul este declarat a fi un cuptor, el poate fi invocat numai cu o anumită subclasă a cuptorului, cum ar fi Cuptorul cu microunde sau ConventionalOven, pentru care este definit cook ().

Clase abstracte și C ++ - dummy

Alegerea editorilor

Social Media Design: Twitter Opțiuni imagine - dummy

Social Media Design: Twitter Opțiuni imagine - dummy

Jonglați constrângerile legate de spațiu și modul cel mai bun de a poziționa cele trei imagini separate pe care vi se permite să le utilizați în profilul dvs. Twitter.

Social Media Design: Inspirând exemplele de afaceri pe Facebook - manechine

Social Media Design: Inspirând exemplele de afaceri pe Facebook - manechine

ÎNainte de scufundări în elementele de bază ale proiectării o pagină solidă Facebook, aruncați o privire asupra unor branduri care profită din plin de Facebook cu pagini proprii. Persoanele fizice și organizațiile de la bloggeri la proprietarii de magazine Etsy de la domiciliu la branduri internaționale folosesc Facebook pentru a se conecta cu clienții și fanii existenți, precum și cu potențialul lor ...

Social Media Optimization: Publicarea Tweets automat la profilul dvs. Facebook - dummies

Social Media Optimization: Publicarea Tweets automat la profilul dvs. Facebook - dummies

Lucrurile noi pe care să le postați pe Facebook pot fi o adevărată corvoadă. Din fericire, există un truc pe care îl puteți optimiza pe acest site media social. Dacă puteți atinge postarea încrucișată a conținutului între servicii, vă puteți salva ceva timp. Twitter vă oferă posibilitatea de a vă conecta profilul cu alte servicii. Există, ...

Alegerea editorilor

Cum se verifică performanța sistemului cu AWS - dummies

Cum se verifică performanța sistemului cu AWS - dummies

AWS (Amazon Web Services) metode pentru monitorizarea serviciilor specifice AWS. Cu toate acestea, este posibil să aveți probleme de performanță a sistemului sau probleme de aplicare non-AWS care trebuie abordate, ceea ce înseamnă că aveți instrumente care pot funcționa în afara AWS. Pachetul de grupuri de instrumente de performanță conține un număr de instrumente specifice pentru realizarea acestei sarcini ...

Cum să alegeți serviciile AWS de care aveți nevoie - dummies

Cum să alegeți serviciile AWS de care aveți nevoie - dummies

Amintiți-vă că aveți doar 12 luni de libertate proces în care să se ia decizii privind serviciile AWS (Servicii Amazon Web) pe care să le utilizați în afacerea dvs. Douăsprezece luni pot părea mult timp, dar veți descoperi că se evaporă înaintea ochilor dvs. în timp ce încercați să vă jonglați responsabilitățile zilnice, întâlnirile ...

Probleme de securitate aWS - dummy

Probleme de securitate aWS - dummy

Pentru a utiliza AWS (Amazon Web Services) cale. Administratorii și profesioniștii în domeniul securității se pot răzbuna rapid, încercând să păstreze aceste computere interconectate în siguranță, dar aceasta face parte din descrierea postului. Trebuie să urmați cele mai bune practici în securizarea sistemelor informatice, a datelor pe care le conțin, ...

Alegerea editorilor

Cum se asamblează o Circuit de organe color - dummies

Cum se asamblează o Circuit de organe color - dummies

După ce ați strâns toate materialele de care aveți nevoie construiți un organ de culoare, sunteți gata să asamblați proiectul. Vedeți ce aveți nevoie pentru a construi un circuit de organe color. Veți avea nevoie de următoarele instrumente: Sârma de lipit, de preferință cu setări de 20 și 40 W Solder Utilizați lipire mai groasă pentru firele de tensiune și subțire ...

Construirea unui Circuit Dead-Bug Style - dummies

Construirea unui Circuit Dead-Bug Style - dummies

) Sunt montate cu capul în jos pe placa de circuit imprimat (PC), majoritatea picioarelor lipindu-se în aer! Arata ca multe. . . morți bug-uri! Un alt nume pentru acest tip de construcție este "circuitele de aer", deoarece componentele sunt atașate direct la ...

Aplicarea RFID în lumea reală - dummies

Aplicarea RFID în lumea reală - dummies

Capacitatea de a urmări și de a urmări, de a urmări și de a găsi, peek sunt toate îmbunătățite prin utilizarea RFID. Unii avocați de confidențialitate vă faceți griji că aparatele vor atașa în mod magic etichetele RFID la îmbrăcăminte sau pantofi pe măsură ce vă plimbați prin magazin sau în jurul unui birou, dar acest lucru este foarte puțin probabil. Limitele ...