Barátságos függvények és osztályok

CharToOem ( "háromszög terület", S);

Ebben a példában pont Dot bejelentett osztálynak, és megoldja a problémát, kiszámítjuk a két pont közötti távolság. A probléma megoldódott háromféleképpen.

Funkció doubleDot. Ker (Dot B) const Dot tagja osztály, és visszaad egy értéket a távolságot a jelenlegi és a célterületeket. A minősítő const mondja a fordító, hogy az állam az aktuális objektum nem kell módosítani. Paraméterként, a függvény megkapja az egész objektum típusú Dot. amely elfoglalja 17 byte a memóriában. osztály tagja funkció által hivatkozott az üzemeltető: A .Dist (B), ahol A jelentése az aktuális objektumot, és a tárgy a B - paramétert.

Funkció barátja doubleDist (constDot A. constDot B) értékét adja vissza a két pont közötti távolság. Const selejtezőn paraméter megmondja a fordítónak, hogy az állam paramétereket nem kell megváltoztatni. Mivel a függvény paraméterei kap két utalást a Dot-típusú objektumokat. amely a memóriában 4 byte. Dist funkciót aktiválja az üzemeltető (A. B). Mivel a függvény egy barátságos osztály Dot. majd hozzáférést a privát tagjai x és y paraméterek A és B, amelyek tárgyakat a típus Dot. segítségével a dot operátor, például: A .x.

Segítségével mutatók és hivatkozások tárgyak, mint a paraméterek függvényében tárgyak helyett csökkenti a memória mennyisége, redundáns függvény, és annak idején a hívást.

A fenti példa is tartalmaz megoldást arra a problémára, terület kiszámításával egy háromszög segítségével a globális funkciók doubleArea (constDot A. constDot B. constDot C), amely megkapja a három hivatkozások szempontjából, és visszaadja az értéket a háromszög területén. Terület funkciót aktiválja az üzemeltető (A. B. C). Annak ellenére, hogy a függvény Dot típusú objektumokat. függvény szervezet nem tartalmaznak utalásokat a privát tagjai az osztály. Ezért nem nyilvánítja a funkciót, mint egy barát.

Funkciók barátságos több osztály

A funkció lehet barátságosabb több osztály. Az alábbi példában megoldja a problémát a kiszámítása a koordinátáit a végén egy adott vektor, az elején, amely egy előre meghatározott ponton.

osztály Dot // osztály pont

Vec AC ( "AC", 2, 2);

A példában az osztályok bejelentett Dot pont és vektor Vec, és a kitűzött feladat megoldására megoldott háromféleképpen.

Funkció voidDot. EndVec (constDot A. constVec AB) tagja Dot osztályban. kap állandó hivatkozás a vektor és az elején a vektor és továbbítja a koordinátákat a végén a vektor az aktuális helyen. Mivel a magán tagoknak Vec osztály nincsenek adatok Dot osztályban. használjuk a nyílt osztályban tag funkciók Vec - GetY () és GetX (). osztály tagja funkció által hivatkozott az üzemeltető: C .EndVec (A. AC), ahol C az aktuális objektum, valamint a tárgyak A és AC - paraméterek.

Funkció voidVec. EndVec (constDot A. Dot B) egy osztály tagja Vec. kap állandó hivatkozás a start vektort és a végén a vektor link. Ennek számításánál a jelenlegi értékeit vektor előrejelzések használnak. Mivel a magán-Data tagok Dot osztály elérhető az osztályban Vec. használjuk a nyílt osztályban tag funkciók Dot - GetX (), GetY (), SetX (), sety (). osztály tagja funkció által hivatkozott az üzemeltető: AC .EndVec (A. C), ahol a cél, AC áram, és a tárgyak A és C - paraméterek.

Funkció barátja voidEndVec (constDot A. constVec AB. pont B) Dot egy barátságos osztály és Vec. E célból nyilvánítja mindkét kategóriában a kulcsszó barátja. A függvény megkapja az állandó utalások az elején a vektor és a vektort, valamint utalás a végén a vektor. Mivel mindkét osztálya zárt adatok tagok és Dot Vec felhasználóbarát funkciók állnak rendelkezésre, akkor használja a „dot” operátor az adatokhoz való hozzáféréshez. Barát funkciót aktiválja az üzemeltető EndVec (A. AC. C).

Tag funkció, barátságos egy másik osztályba

A funkció lehet tagja az egyik osztály egy másik osztály és barátságos. Ennek igazolására szintaxis részesülő kis változás az előző példában.

Hívjon A fenti funkciók nem különbözik az előző példában.

Egy osztály nem nyilvánítja magát a barátja egy másik osztályba. Hogy barát mechanizmus működött, azt be kell jelenteni a barátságos, ebben a másik osztályban.

barátja classVec; // Vec osztály nyilvánították más osztályokba Dot

Kapcsolódó cikkek