Clase și obiecte în c
În cele din urmă am ajuns la cele mai importante subiecte din curs introductiv. Astăzi vom vorbi despre clase și obiecte. Release mici și nu complicat. Ceea ce este bun.
Clasa - nimic ca structură, la care s-a adăugat funcția. Și obiectul - este o variabilă structură.
Acest material va fi mai ușor de înțeles dacă vă familiarizați cu structurile.
programare structurată
Toate exemplele prezentate până acum se referă la programarea structurată. marca sa este un program de partiție cod-blocuri, realizarea unor sarcini specifice. În acest caz, unitățile structurale sunt caracteristici și module (care pot fi prezentate în fișiere separate).
Programarea orientată pe obiecte (OOP)
Mult mai avansat este orientat pe obiect de programare (denumit în continuare OOP). Conceptul de OOP mai aplicabile datelor organizației. OOP face viața mai ușoară programator, este fără îndoială. Caracteristica principală este integrarea datelor și a funcțiilor.
Concepte cheie in OOP sunt obiecte și clase. Clase - o structură în care funcția adăugată. Si obiecte - o variabilele structurale.
definiție de clasă
Definiția clasă trebuie să fie plasate înainte principal.
Să începem cu un exemplu simplu:
În acest exemplu, definiția definiției clasei este structuri aproape identice. Există doar două diferențe: titlul în loc de cuvântul cheie struct este în valoare de clasă. Al doilea - în primul rând al definiției de clasă ar trebui să publice cu două puncte. Aici, ne vom uita la public foarte curând. În primul rând, vom crea un același tip de soldat variabilă.
Aici am creat o clasă de un obiect soldat. Uite, destul de diferit de orice variabile structurale. În acest caz, obiectul (variabile ale clasei) pot fi utilizate ca și variabilele structurale.
Accesul specificatorilor publice și private
În mod implicit, structurile folosite de Specificatorul publicului de acces, și clase private. Luați în considerare exemplele de necalificată:
Aici, între structuri și clase este o distincție importantă. Iată cum să se uite într-adevăr definiția anterioară:
Compilatorul introduce automat public și privat. Structura implicită este utilizată de către public, clasa implicită este folosită privat.
publice de acces specificator
Acest Specificator implicit este utilizat în structuri. Pentru a-l utiliza în clasă necesitatea de a declarat în mod explicit.
Specificator publice permite variabile / obiecte sunt create pe baza acestei structuri de acces / clasă la câmpurile.
În acest caz, utilizarea de clase nu este diferită de structurile.
Specificator acces privat
Vom declara întotdeauna specificatorilor acces în mod clar: atât private, cât și publice.
Atunci când acest exemplu, compilatorul va genera o eroare. Nu putem accesa câmpul de muniție în afara sălii de clasă.
Dincolo de clasă - astfel încât oriunde în acolade ale definiției clasei (există o excepție, dar mai mult pe aceasta mai jos). În cazul în care obiectul clasei încearcă să acceseze o variabilă de clasă (a.ammo), este, de asemenea considerat a fi „în afara sălii de clasă“.
specificatori de acces (și publice, private) sunt, deoarece acestea apar în clasa până în momentul în care întâlnește un alt specificator sau o definiție de clasă se termină.
Ce e același lucru pentru a defini variabilele din blocul cu publicul Specificator? Faptul este că, în plus față de clasele de variabile pot conține funcții.
Funcția definită în cadrul unei clase sunt numite metode ale clasei.
metode de clasă
Luați în considerare acest exemplu: Să presupunem că vrem să învețe pe soldații noștri să meargă. Iată cum va arăta atunci când se utilizează structuri:
Desigur, este mai bine să mutați funcția de scriere:
void move (int x, int y) <>
Și ar trebui să arate ca funcția corpului? Putem scrie pur și simplu:
Dar apoi, dacă avem câteva tipuri de variabile soldat, nu putem folosi funcția de mutare a acestora. Prin urmare, trebuie să treacă un alt argument - structură variabilă ale cărei câmpuri sunt modificate. Deci:
Acum, să vedem cum raboat cu această caracteristică:
Funcția este trecut un soldat variabilă, dar trebuie să fie și să se întoarcă de la funcția. Funcția este trecut o perioadă suplimentară de 8 octeți (câmpuri x, y) soldat variabil, iar funcția returnează opt octeți. Cu siguranță mai bine soldat să treacă prin referință.
A se vedea cât de ușor! Cu clase totul este mult mai simplu:
In interiorul functiei am definit functia move. Rețineți că în ea nu are nevoie să treacă obiecte ale clasei - o metodă el știe ce obiect, acesta a cauzat. dx și dy - valori care se vor schimba câmpurile de clasă.
Metodele de clasă sunt invocate aproape la fel și funcțiile obișnuite. În acest caz, metoda știe ce obiect, acesta a cauzat, și va schimba domeniul obiectului dorit.
Ascunderea date
Acum, să tot la fel vom înțelege de ce există un specificator de acces privat.
Nu avem acces la variabilele x, y. Dar ele sunt disponibile într-o clasă. Metoda de mișcare are, de asemenea, acces la ele, deoarece este o metodă de clasa soldat.
Acum, schimba x și y se poate deplasa numai cu ajutorul metodei. x și y sunt ascunse. Și este foarte adevărat. Pentru a înțelege de ce acest lucru este corect, nu vom mai curând - numai atunci când vom începe să lucreze cu clasele mari.
Constructorul clasei
Acum, că datele noastre proiecte în siguranță, ascunse de privat specifier, încercați să le inițializa:
soldat a =;
Dar atunci compilatorul va da o eroare de a spune: Ei bine, este fiecare dintre voi încerca să obțină acces la datele ascunse?
Ce să fac? Se pare că avem acces la variabile prin mișcare etip, și cum să setați aceste variabile valori inițiale?
Dacă încercați următoarea metodă:
Apoi, desigur, compilatorul va genera o eroare și apoi, din moment ce definiția clasei nu este alocată memorie.
Deci, în fiecare clasă există o funcție specială care se numește de fiecare dată când un obiect este creat de clasa. Această funcție se numește constructorul clasei. Dacă nu creați în mod explicit un constructor, compilatorul apelează constructorul implicit.
Designer - aceasta este o caracteristică comună, dar nu are nici o valoare de întoarcere. nume de designer se potrivește cu numele clasei. Proiectantul trebuie să fie amplasat în secțiunea publică.
Constructorul este apelat când o clasă de obiecte:
soldat a, b;
Aici, pentru ambele obiecte a și b se numește un constructor.
Există, de asemenea, o formă de înregistrare:
Se părea indiciu că funcția este numit (constructor) pentru a crea o și b.
Apropo! Constructorii sunt numite nu numai pentru tipuri de date personalizate, dar, de asemenea, pentru standardul. De exemplu, în determinarea tipului de constructor corespunzător variabilă se numește char. În acest caz, constructorul alocă memorie pentru variabila - un octet.
Listă constructor de inițializare
Definirea soldatului clasa de constructor este absolut corectă. Dar, de obicei, în organism constructor nu inițializa variabile ale clasei. În schimb, listele initsitsalizatsii sunt folosite pentru a inițializa variabilele de clasă. Aici este definitia constructorului clasei de soldat cu o listă de initializare:
Lista de inițializare este înregistrată după proiectantul titlu între paranteze și separate prin două puncte. În lista, variabilele de clasă sunt separate prin virgule, iar valoarea este scrisă între paranteze, care trebuie să fie inițializată variabile.
funcţii supraîncărcat
Înainte de a continua să vorbim despre clase, trebuie să știm ce funcțiile supraîncărcate.
Să presupunem că avem nevoie de două din aceleași funcții care operează pe diferite tipuri de date. O funcție este trecut un argument de tip int, iar în altul - tipul float. În acest caz, același nume poate fi utilizat pentru două funcții. Aceste funcții sunt numite supraîncărcate:
Rețineți că există, de fapt, cele două funcții sunt definite, dar cu același nume. Faptul este că compilatorul este în căutarea nu numai un nume, ci și cu privire la numărul și tipurile de argumente ale unei funcții. În acest caz, tipul de întoarcere nu este luată în considerare atunci când se încearcă să determine următoarele funcții, compilatorul va genera o eroare:
Acum, ia în considerare utilizarea funcțiilor supraîncărcate în practică:
Deoarece designeri - acest lucru nu este nimic, în funcție de, respectiv, ele pot fi supraîncărcat. În acest scop, definiția clasei este necesar să se definească doi constructori:
Titlul celui de al doilea designerului sa dovedit destul de mult timp, dar acest lucru este compensat a apărut în capacitățile noastre:
soldat s1;
s1 soldat (3,4,10);
Când creați primul constructor variabilă fără argumente. În al doilea caz - proiectantul cu argumente. A se vedea cât de ușor este acum posibil pentru a inițializa noi variabile. În acest caz, vom folosi lista de inițializare, trebuie doar să înlocuiască paranteze nu sunt valori constante, și valorile parametrilor trecut la constructor.
Identificarea metodelor în afara clasei
În cadrul publicului bloc de clasă vom anunța metoda de atac. Determinarea metodei este în afara clasei, dar metoda poate utiliza în continuare ascuns dannami clasa sa. Pentru a face clar faptul că această funcție este o metodă de clasă, funcționarea rezoluției globale utilizate. În primul rând, vom scrie numele clasei, operațiunile globale semneze permisul și apoi - numele metodei. În toate celelalte privințe definiția funcției coincide cu faptul că am văzut deja.
Iată cum va arăta clasa soldat dacă vom depune metoda mutare în afara clasei:
Metodele sunt transportate în afara definiției de clasă pentru a crea clase mari.
Date clasa statică
Pentru fiecare obiect, această clasă creează propriul set de variabile. Dar avem o oportunitate pentru toate obiectele pentru a crea o singură variabilă. În ea, de exemplu, puteți stoca numărul de obiecte deja existente ale acestei clase.
variabila contor am declarat cu cuvântul cheie static. De asemenea, în afara clasei, am inițializa această variabilă. La inițializarea, noi, ca și în sala de clasă, utilizând funcționarea autorizației globale.
În constructor, vom crește o variabilă de unul.
Acum, de fiecare dată când programul va crea un obiect de tip soldat, contra variabilă este incrementat.
exerciții:
Cele mai recente de la bord
lalala1006 → Cursuri Teacher (Minecraft, Scratch, Unity 3D, GameMaker)
Noi preda programarea copiilor prin crearea de jocuri pentru mai mult de doi ani. În acest timp vom construi.
Edvard007 → Ce se întâmplă dacă Insorg blocat
Stimați utilizatori forum! Dacă întâmpinați dificultăți cu acces la res noastre web.
ganny → 3000 ruble bonus. Slot machines Vuulkan
3000 ruble bonus de înscriere în club de jocuri de noroc vulcan. Bonusul este dat doar aici. Wulka.
ganny → vulcan cazinou bani reali?
Și aici sunt cazinourile online de top recomanda celor care respectă licența de cazinou. proiecte interesante, mai multe limbi.
IndieCurator → Promovarea jocurilor Steam
Doamne! Fiecare dezvoltator \ editor care se respecta pentru a elibera jocul știe că fără reclame.
proxyan → Serviciu PROXYAN.net - cumpăra un proxy server de încredere, HTTP rapid / SOCKS
PROXYAN.net Service - solutie de securitate profesionala pe serv de rețea.
Invitat → Party NextCastle - festival de jocuri indie și retro
este foarte decelabil are un impact redus asupra mediului, este extrem de durabil, pot fi obținute pe o mare. Invitat → Echipa intern anunță jocul cu un nume neobișnuit «RIP»
zircon straluceste puternic pe Tropical Flamingo, Ocean Life și farmece Tropical Sunset, în dif. întăririle → oaspeți puternice au afectat Tactici Zone
Tutti i MODELLI sono elect rinnovati nello stile e, în quanto Maestrul Chronometer, sono assolutamente. Invitat → Echipa intern anunță jocul cu un nume neobișnuit «RIP»
Scopra la nuova Collezione costituita da Orologi donna. → Descărcați oaspeți Blitz3d cea mai recentă versiune gratis, prog
Program normal poate fi spam-ul de jocuri, dar mai întâi trebuie să te uiți tutoriale 300000. → Manual de oaspeți modul de a crea un MMORPG
Ca MMORPG-ul jucator cu experienta de 15 ani, absolut de acord că, practic, întreaga on-line și. Invitat → Punerea în aplicare a listelor pur și simplu conectate și dublu-legate - 2
M-am dus peste acest websitewebsite și cred că aveți o mulțime de informații minunat, salvat pentru a-mi b. Invitat → Supliment Devastarea la Call of Duty: Ghosts
Un joc de strategie mare. ciocnire realmer