Barátságos funkciók (módszerek) c

Ebben a cikkben a következőkről beszélünk:

  • Mik azok a barátságos funkciók, és ami a legfontosabb, miért van szükség.
  • Mi a különbség a szokásos osztálymódszerek és az osztály baráti funkciói között?
  • Hogyan lehet bejelenteni és meghatározni a barátságos funkciókat?
  • Hogyan hívhatunk barátságos funkciókat a fő () függvényből.

A legfontosabb, de legvalószínűbb, a leginkább érthetetlen számodra most egy barátságos funkció meghatározása.

A barátságos funkció egy olyan funkció, amely nem tagja az osztálynak, de hozzáférést biztosít a privát vagy védett területeken bejelentett osztály tagjaihoz.

Hosszú ideig ne tekintsd át a meghatározás lényegét, hanem egyenesen a következő bekezdésre. Megígérem, hogy a cikk elolvasása után vissza fog térni ehhez a definícióhoz, és meglátogatja a gondolat: "Nos, igen, szóval! Itt minden világos! "

névtér std;

név = új karakter [20];

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

barátom void getData (Woman25);

>; // A Woman25 meghatározása lejárt

void setData (char * n, int w, Woman25) object) // define friend-function setData

void getData (Nő25 object) // define friend függvény getData

cout <

void Woman25 :: setData (char * n, int w) / / definiálja az osztály beállított módját

void Woman25 :: getData () // határozza meg az osztály get-metódusát

cout <

void Woman25 :: tanácsadás () // határozza meg az osztályt módszer tanácsát

ha (súly <55)

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

> egyébként, ha (súly> = 55 súly <= 65)

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

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

Woman25 Norm; // létrehozza a Norm objektumot, a konstruktor működni fog, és a tömeg lesz = 60, név - Norm

Norm.getData (); // hívja az osztály módszert

Woman25 Anna; // Második objektum

Anna.setData ("Anna", 100); // Hívja az osztály módszert

Anna.getData (); // Hívja az osztály módszert

Anna.advise (); // Hívja az osztály módszert

Woman25 Inna; // Harmadik tárgy

setData ("Inna", 50, Inna); // Hívja fel a barátságos funkciót

getData (Inna); // Hívja fel a barátságos funkciót

Inna.advise (); // Hívja az osztály módszert

Most talán a legérdekesebb, a baráti funkciók és az osztály szokásos módszereinek osztályán kívül eső definíció. Mindez a 32-66. Sorban található. Lásd, mikor meghatároztuk a barátságos funkciókat. 32-36 és 38-41 vonalakon, nem használunk operátort. kettőspont (a módszer hatóköre). Ez már azt mondja nekünk, hogy a barátságos funkció nem tartozik az osztályhoz, nem alkotórésze. Más módszerek meghatározásakor használja a kezelőt. kötelező. A tanácsadás () osztály módszere. a kapott súlyadatok alapján a felhasználónak az egyik tippje vagy jelentése, hogy a súly normális.

Menjen a fő funkcióra - a 68 - 87 sorok. Itt hozunk létre egy objektumot a Woman25 Norm; amikor létrejön, a konstruktor aktiválja és inicializálja a neveket és súlyelemeket. A Norm.getData () osztálymódot nevezzük; a normál érték megjelenítéséhez. A második teremtett tárgy, Woman25 Anna; Úgy dolgozunk, hogy felhívjuk a szokásos szetteket, és megkapjuk az osztály módszereit, valamint a harmadik, a Woman25 Inna harmadik tárgyát; - Barátságos funkciókat okoz. Amint láthatja, olyan funkcióknak hívják őket, amelyek nem tartoznak az osztályhoz. Az osztályobjektumot paraméterként adjuk át.

Futtassa a programot, és tekintse meg a következőket:

Destructor.
. Destructor.
. Destructor.

A folytatáshoz nyomjon meg egy gombot.

Most, mint mindig, van egy kis elmélet az anyag rögzítéséhez:

  • Egy barátságos funkció bármelyik osztály mezőben található - privát. nyilvános vagy védett. Minden körülmények között hozzáférhet az osztály privát elemeihez, és még ha magában is van a privát mezőben (mint a mi példánkban), speciális módszerek nélkül érhető el az osztályon kívül.
  • Amikor egy barátságos funkciót definiálunk, az osztályelemeket explicit módon át kell adni függvényparaméterként. Mivel ez nem része az osztálynak, nem kapja meg ezt.
  • Paraméter formájában, baráti funkcióban, át kell adnia egy mutatót vagy hivatkozást egy osztály objektumra. Ellenkező esetben nem fog látni, hogy milyen osztályba kell beérkeznie és feldolgozni.
  • A funkció több osztály számára is barátságos lehet.
  • A barátságos funkciókat normál funkciónak nevezik. Tehát ez a módszer nem használható - Object_class.function (). Miután megadta az összes szükséges paramétert, amikor felhívta, látja, hogy mely elemekkel és objektummal kell dolgozni.

Ez az egész.

Kapcsolódó cikkek