Draugo funkcijos ir draugo klasės skirtumas

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 12 Gegužė 2024
Anonim
Isgelbek Drauga
Video.: Isgelbek Drauga

Turinys


Funkcija „Draugas“ ir „Draugų klasė“ yra būdai, naudojami priėjimui prie privačių klasės narių, naudojant draugo žodį. Bendras skirtumas tarp draugo funkcijos ir draugo klasės yra tas, kad kai naudojama draugo funkcija, prieiga prie privačios klasės narių gali būti prieinama, tačiau draugų klasėje prieinami tik draugų klasės vardai, o ne privatūs klasės nariai.

draugo funkcija ar tai naudojama funkcija, ar klasė, gali turėti neigiamos įtakos į objektą orientuotai sistemai, nes ji silpnina inkapsuliacija kuri yra prieš orientuotas į objektą paradigma. Dėl šios priežasties draugo funkcija turi būti naudojama protingai, nes kitaip ji galėtų būti pertrauka duomenų slėpimas kodo.

Ši draugo savybė nėra komutacinis ir nei pereinamasis. X yra Y draugas, nenulemia, kad Y taip pat yra X draugas. Jei X yra Y draugas, o Y yra Z draugas, nereiškia, kad X yra Z draugas.


    1. Palyginimo diagrama
    2. Apibrėžimas
    3. Pagrindiniai skirtumai
    4. Išvada

Palyginimo diagrama

Palyginimo pagrindasDraugo funkcijaDraugų klasė
PagrindinisTai funkcija, naudojama kartu su draugu, siekiant suteikti privatiems klasės nariams prieigą prie ne nario funkcijos.Tai klasė, naudojama kartu su draugu, norint pasiekti privačius kitos klasės narius.
Išankstinė deklaracijaTuri būti naudojamas.Nera privalomas.
NaudokiteDraugo funkcija gali būti naudojama tam tikroje situacijoje, kai operatorius perkraunamas.Draugų klasė gali būti naudojama, kai klasė sukuriama kitos klasės viršuje.

Draugo funkcijos apibrėžimas

draugo funkcija naudojamas privačių ir saugomų klasės narių prieigai, suteikiant galimybę ne nario funkcijai pasiekti. Tokio tipo funkcijose prieš funkcijos pavadinimą deklaravimo metu naudojamas draugo raktinis žodis. Draugo funkcijai taikomos kelios ribojančios sąlygos. Pirma sąlyga - draugo funkcija nėra paveldima vaikų klasėje. Antroji sąlyga yra ta, kad saugojimo klasės specifikatoriaus gali nebūti draugo funkcijoje, o tai reiškia, kad jo negalima deklaruoti kaip statinio ir išorinio.


Draugo funkcija nėra iškviečiama kviečiant klasės objektą. Draugo funkcijos pavyzdžiai yra šie: bendroji funkcija, klasės nario funkcija, funkcijos šablonas gali būti draugo funkcija. Supraskime tai naudodamiesi pavyzdžiu.

# įtraukti naudojant vardų sritį; pirma klasė {int data; public: first (int i): data (i) {} friend void display (const first & a); }; void display (const first & a) {cout << "data =" <naudojant vardų sritį std; klasė pirma {// Paskelbk draugo klasės draugą klasę antra; viešas: Pirmas (): a (0) {} void () {cout << "Rezultatas yra" << a << endl; } privatus: int a; }; klasė Antroji {vieša: negaliojanti kaita (Pirma ir yklas, int x) {yclass.a = x; }}; int main () Pirmasis obj1; Antrasis obj2; obj1. (); obj2.change (obj1, 5); obj1. (); // Rezultatas Rezultatas yra 0 Rezultatas yra 5

  1. Draugo funkcija yra funkcija, kuria gali naudotis privatūs ir saugomi klasės nariai. Draugų klasė, priešingai, yra klasė, padedanti patekti į privačius klasės narius.
  2. Draugo funkcija deklaruojama įtraukiant jos prototipą į klasės vidų, prieš tai naudojant raktinį žodį draugas. Panašiai draugų klasė taip pat apibrėžiama naudojant raktinį žodį draugas.
  3. Išankstinė deklaracija naudojama, jei draugo funkcija yra priešinga, jos naudoti nebūtina draugų klasėje.

Išvada

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