frg Skrevet 16. mars 2004 Del Skrevet 16. mars 2004 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? Lenke til kommentar
kjetil7 Skrevet 16. mars 2004 Del Skrevet 16. mars 2004 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...) Lenke til kommentar
søppel Skrevet 16. mars 2004 Del Skrevet 16. mars 2004 (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 16. mars 2004 av søppel Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå