Funcții prietenoase (metode) din c

În acest articol vom vorbi despre următoarele:

  • Care sunt funcțiile prietenoase și, cel mai important, de ce sunt necesare.
  • Care este diferența dintre metodele uzuale de clasă și funcțiile prietenoase ale clasei.
  • Cum să declarați și să definiți funcții prietenoase.
  • Cum se apelează funcții prietenoase din funcția principal ().

Cea mai importantă, dar și cea mai probabilă, cea mai neînțeleasă pentru dvs. acum este definirea unei funcții prietenoase.

O funcție prietenoasă este o funcție care nu este membru al clasei, dar are acces la membrii clasei declarate în câmpurile private sau protejate.

Pentru o lungă perioadă de timp, nu vă îngropați în esența acestei definiții, ci mergeți mai degrabă la paragraful următor. Promit că după citirea articolului veți reveni la această definiție și veți fi vizitați de gândul: "Ei bine, da - așa este! Totul este clar aici! "

folosind namespace std;

nume = noul caracter [20];

cout <<". Деструктор. " <

prieten void getData (Femeie25);

>; // Definiția femeii25 a expirat

void setData (char * n, int w, Femeie25 obiect) // defini set de prieteni functie prieten

void getData (Woman25 obiect) // definește funcția prietenului getData

cout <

void Woman25 :: setData (char * n, int w) / / definește metoda setată a clasei

void Woman25 :: getData () // definește metoda get-ului din clasă

cout <

void Woman25 :: sfătuiește () // definește metoda de clasă Sfat

dacă (greutate <55)

cout <<"Вам надо потреблять больше калорий!" <

> altfel dacă (greutate> = 55 greutate <= 65)

cout <<"Ваш вес в норме!" <

cout <<"Вам надо ограничивать себя в еде!" <

Femeie25 normă; // crea obiectul Norm, constructorul va funcționa și greutatea va fi = 60, nume - Norm

Norm.getData (); // apelează metoda de clasă

Femeie25 Anna; // Al doilea obiect

Anna.setData ("Anna", 100); // Apelați metoda de clasă

Anna.getData (); // Apelați metoda de clasă

Anna.advise (); // Apelați metoda de clasă

Femeie25 Inna; // Al treilea obiect

setData ("Inna", 50, Inna); // Apelați funcția prietenoasă

getData (Inna); // Apelați funcția prietenoasă

Inna.advise (); // Apelați metoda de clasă

Acum începe, poate, cea mai interesantă - definiția în afara clasei funcțiilor noastre prietenoase și a metodelor uzuale ale clasei. Toate acestea sunt plasate în liniile 32-66. Vezi când definim funcții prietenoase. liniile 32-36 și 38-41 nu folosim operatorul. dublu colon (scopul metodei). Acest lucru ne spune deja că funcția prietenie nu aparține clasei, nu este componenta ei. Și când definiți alte metode, utilizați operatorul. este obligatorie. Metoda din clasa advice (). pe baza datelor privind greutatea obținute, oferă utilizatorului unul dintre sfaturile sau rapoartele conform cărora greutatea este normală.

Mergeți la funcția principală - liniile 68 - 87. Aici vom crea un obiect de clasă Woman25 Norm; când este creat, constructorul va declanșa și inițializa elementele de nume și greutate. Se numește metoda de clasă Norm.getData (); pentru a afișa valoarea normală. Cu cel de-al doilea obiect creat Woman25 Anna; Lucrăm apelând setul obișnuit și obținem metode ale clasei, iar cu al treilea obiect Woman25 Inna; - cauzând funcții prietenoase. După cum puteți vedea, ele sunt numite funcții care nu aparțin clasei. Transmitem obiectul de clasă ca parametru.

Rulați programul și vedeți următoarele:

Destructor.
. Destructor.
. Destructor.

Pentru a continua, apăsați orice tastă.

Acum, ca întotdeauna, există o mică teorie, pentru fixarea materialului:

  • O funcție prietenoasă poate fi localizată în orice domeniu de clasă - privat. publice sau protejate. Va avea acces la elementele private ale clasei în orice împrejurare și, chiar dacă ea însăși se află în domeniul privat (ca în exemplul nostru), poate fi accesată în afara clasei fără a folosi metode speciale.
  • Atunci când definim o funcție prietenoasă, elementele clasei trebuie să fie transferate explicit ca parametri funcționali. Deoarece nu este o componentă a clasei, ea nu primește acest lucru.
  • Sub forma unui parametru, într-o funcție prietenoasă, trebuie de asemenea să treci un pointer sau o referință la un obiect de clasă. Altfel, nu va vedea datele despre ce clasă ar trebui să primească și să proceseze.
  • Funcția poate fi folosită ca fiind prietenie cu mai multe clase.
  • Funcțiile prietenoase sunt numite funcții normale. De exemplu, această metodă nu este utilizată - Object_class.function (). După ce a introdus toți parametrii necesari în el atunci când a sunat, el vede cu elementele din care clasă și obiect ar trebui să fie lucrat.

Totul începe cu asta.

Articole similare