Gå til innhold

Anbefalte innlegg

Skrevet

Dette er kanskje ett dumt spørsmål, men....

 

Hvorfor bruker man friend? Hvorfor lager man ikke bare den funksjonen som vil skal være friend som en medlemsfunksjon av klassen?

Videoannonse
Annonse
Skrevet

friend er en mekanisme som gjør at du kan aksessere private funksjoner og variabler i en klasse utenfra klassen. Et lite eksempel:

 

#include <string>

class Babe
{
private:
  static void DoSomethingPrivate();
  
  friend class Boyfriend; // gir Boyfriend aksess til alle private funksjoner medlemsvariable
  friend Lover::MeetMistress(); //gir privat aksess til en funksjon i Lover klassen
  friend MeetLover(const std::string &); // gir privat aksess til MeetLover funksjonen
};


class Boyfriend
{
  void MeetGirlfriend()
  {
     Babe::DoSomethingPrivate(); //ok, fordi Babe har Boyfriend som friend
  }
};


class Lover
{
  void MeetMistress()
  {
     Babe::DoSomethingPrivate();
  }

  void CallMistress()
  {
     // Babe::DoSomethingPrivate();  //vil ikke kompilere
  }
};


void MeetLover(const std::string& location_)
{
  Babe::DoSomethingPrivate(); //ok, fordi Babe har MeetLover funksjonen som friend
}

 

Håper du fikk et lite inntrykk av hva friend er. Prøv gjerne å fjerne noen av friend deklarasjonene for å se hva som vil skje uten dem (NB! jeg har ikke kjørt koden gjennom en kompilator, så jeg tar forbehold om trykkleifer...)

Skrevet (endret)

Se TCPL §11.5 for et eks. som snakker om multiplikasjon av en matrise-klasse med en vektor-klasse.

 

Eventuellt se eksempler i din egen bok, eller google.

 

Edit:

Kort; poenget er at (du i den gjeldende) klassen selv kan velge, "med nøyaktighet", hva som skal ha tilgang. Ikke enten-eller: public / private || protected.

Endret av søppel

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...