Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

Skirtumas tarp draugo funkcijos ir draugo klasės

Draugo funkcija ir draugo klasė yra metodai, naudojami privataus klasės nariams pasiekti naudojant draugo raktinį žodį. Paprastas skirtumas tarp draugo funkcijos ir draugo klasės yra tas, kad naudojant draugo funkciją, privataus klasių nariams gali būti prieinama, bet draugo klasėje tik draugo klasės vardai yra prieinami ne privatiems klasės nariams.

Draugo funkcija, ar naudojama pagal funkciją, ar klasę, gali neigiamai paveikti į objektą orientuotą sistemą, nes ji susilpnina kapsulę, kuri yra prieš objektą orientuota paradigma. Tai yra priežastis, dėl kurios draugo funkcija turi būti naudojama protingai, kitaip ji gali nutraukti kodo paslėpimą .

Ši draugo funkcija nėra nei kommutacinė, nei transitinė . X yra „Y“ draugas, o ne tai, kad Y taip pat yra X draugas. Jei X yra „Y“ draugas ir Y yra „Z“ draugas, tai nereiškia, kad X yra Z. draugas.

Palyginimo diagrama

Palyginimo pagrindasDraugo funkcijaDraugų klasė
PagrindinisTai funkcija, naudojama kartu su draugo raktiniu žodžiu, kad suteiktų ne nario funkcijų prieigą prie privačių klasės narių.Tai yra klasė, naudojama kartu su draugo raktiniu žodžiu, kad galėtumėte pasiekti privačios kitos klasės narius.
Persiųsti deklaracijąTuri būti naudojamas.Nera privalomas.
NaudokiteDraugo funkcija gali būti naudojama tam tikroje operatoriaus perkrovimo situacijoje.Draugų klasė gali būti naudojama, kai klasė sukuriama kitos klasės viršuje.

Draugo funkcijos apibrėžimas

Draugo funkcija naudojama prieigai prie privačių ir saugomų klasės narių, leidžiant ne nario funkcijai pasiekti. Šio tipo funkcijose prieš funkcijų pavadinimą deklaracijos metu naudojamas draugo raktinis žodis. Draugo funkcijai taikomos kelios ribojančios sąlygos. Pirmoji sąlyga yra ta, kad draugo funkcija nėra paveldima vaiko klasėje. Antroji sąlyga yra ta, kad saugojimo klasės specifikatorius gali nebūti draugo funkcijoje, o tai reiškia, kad jis negali būti deklaruojamas kaip statinis ir išorinis.

Draugo funkcija neskambinama su klasifikuojamu klasės objektu. Draugo funkcijos pavyzdžiai: pasaulinė funkcija, klasės funkcija, funkcijos šablonas gali būti draugo funkcija. Suprasime tai naudodami pavyzdį.

 #įtraukti naudojant vardų sritį std; pirmos klasės {int data; viešas: pirmas (int i): duomenys (i) {} draugo negaliojantis ekranas (const first & a); }; void display (const first & a) {cout << "data =" < 

Draugų klasės apibrėžimas

Panašiai kaip draugo funkcija, mes galime padaryti vieną klasę kitos klasės draugu, vadinamu draugo klase . Kad draugo klasė galėtų pasiekti privačių narių, apibrėžtų kitoje klasėje. Svarbu prisiminti, kad draugo klasė gali pasiekti tik kitoje klasėje apibrėžtus vardus, o ne paveldėti kitą klasę. Būtent pirmosios klasės nariai negali tapti draugo klasės nariais. Šios draugų klasės retai naudojamos.

Draugų klasė gali būti paskelbta daugiau nei vienoje klasėje. Tai laikoma trumpu alternatyviu metodu draugo funkcijai, nes naudojant šią priemonę galime sukurti draugo klasę, kuri galėtų naudotis visais duomenų nariais ir funkcija, o ne kurti kelias draugo funkcijas.

 #įtraukti naudojant vardų sritį std; klasė Pirmoji {// Parašykite draugo klasės draugo klasę Antra; public: First (): a (0) {} void print () {cout << "Rezultatas yra" << a << endl; } privatus: int a; }; klasė Second {public: void change (pirmasis ir yclass, int x) {yclass.a = x; }}; int main () // Išvestis Rezultatas yra 0 Rezultatas yra 5 

Pagrindiniai skirtumai tarp draugų funkcijos ir draugo klasės

  1. Draugo funkcija yra funkcija, kuri gali pasiekti privačius ir saugomus klasės narius. Priešingai, draugo klasė yra klasė, padedanti pasiekti privataus klasės narius.
  2. Draugo funkcija yra paskelbta įtraukiant jos prototipą klasėje, prieš jį atsiųsime su raktažodžių draugu. Panašiai draugo klasė taip pat apibrėžta naudojant raktinių žodžių draugą.
  3. Išankstinė deklaracija naudojama tuo atveju, kai draugas veikia kaip prieš, nereikia ją naudoti draugo klasėje.

Išvada

Draugo funkcija reikalinga, kai funkcijai reikia prieiti prie dviejų ar daugiau nepriklausomų klasių, vidinių narių. Kita vertus, reikalinga draugo klasė, kai klasė reikalauja prieiti prie kitos klasės narių. Kai kelių narių funkcija turi būti tos funkcijos draugas, tokiu atveju geriau naudoti draugo klasę.

Top