Funzioni friend

di il
8 risposte

Funzioni friend

Quando si definisce una funzione friend all'interno di una classe, la funzione può accedere ai suoi membri privati e pubblici, ma non ho capito quale sia la differenza nel definire una funzione friend all'interno della sezione privata o della pubblica della classe.
Quando la funz. friend si definisce in una sezione o l'altra?

8 Risposte

  • Re: Funzioni friend

    .
  • Re: Funzioni friend

    migliorabile ha scritto:


    La keyword 'friend' serve per dire che i metodi (NON funzione, se sta' dentro una classe) di UN'ALTRA classe POSSONO accedere ai metodi e membri privati & protetti della classe CORRENTE (quelli pubblici non sono un problema).
    Si parla di funzione friend se però è globale, giusto? Se fosse una funzione membro di un'altra classe si parlerebbe di metodo, o sbaglio?
    Mi rimane difficile capire i due casi di friend di funzione globale o metodo, avete riferimenti sul web dove posso cercare? Sto provando ma non trovo niente di costruttivo!
  • Re: Funzioni friend

    Quando si definisce una funzione friend all'interno di una classe, la funzione può accedere ai suoi membri privati e pubblici, ma non ho capito quale sia la differenza nel definire una funzione friend all'interno della sezione privata o della pubblica della classe.
    E' indifferente.
    La keyword 'friend' serve per dire che i metodi (NON funzione, se sta' dentro una classe) di UN'ALTRA classe POSSONO accedere ai metodi e membri privati & protetti della classe CORRENTE (quelli pubblici non sono un problema).
    Piccola premessa... dire che i metodi stanno dentro la classe e le funzioni no, non mi sembra l'espressione più felice per spiegare la differenza tra metodi e funzioni.
    Detto questo, dal momento che la keyword friend può essere applicata sia ad un metodo che ad una funzione, se zio_mangrovia parla di "funzione friend" (non so se a torto o a ragione... magari anche l'uso del verbo definire al posto del verbo dichiarare è stato un peccato di superficialità), su cosa si basa la tua convinzione che si tratta invece di un metodo?
    Si parla di funzione friend se però è globale, giusto? Se fosse una funzione membro di un'altra classe si parlerebbe di metodo, o sbaglio?
    Esatto.
    Mi rimane difficile capire i due casi di friend di funzione globale o metodo, avete riferimenti sul web dove posso cercare? Sto provando ma non trovo niente di costruttivo!
    Cosa non ti è chiaro?
  • Re: Funzioni friend

    .
  • Re: Funzioni friend

    zio_mangrovia ha scritto:


    ma non ho capito quale sia la differenza nel definire una funzione friend all'interno della sezione privata o della pubblica della classe.

    Nippolo ha scritto:


    E' indifferente.
    Era quello che volevo sapere, grazie!
    Cosa non ti è chiaro?
    innanzitutto non capisco come si distingue un metodo friend da una funzione globale friend.
    Poi non ho ben chiaro nel caso avessi 2 classi diverse (A e B) come possa accedere ai membri della classe A dall'interno di un metodo della classe B.
    Magari faccio un esempio?
  • Re: Funzioni friend

    @Nippolo, mi genufletto alla tua sapienza
    Se con sapienza intendi cultura, allora credo che in ambito informatico tu ne sappia molto più di me, io mi limito semplicemente a ragionare sulla base delle poche conoscenze in mio possesso.
    esistono METODI al di fuori di una classe e FUNZIONI all'interno di una classe?

    Fornisci un riferimento in cui e' ESPLICITATA questa situazione (NON tue considerazioni, ma un libro di testo, con tanto di PAGINA e RIGA), oppure un esempio (codice C++ compilabile) chiarificatore
    Metterla su questo piano non mi sembra il massimo dell'onestà intellettuale... sai benissimo che non intendevo questo. In ogni caso se anche volessi rispondere non saprei come farlo, visto che ignoro cosa si intende precisamente con l'espressione "stare dentro alla classe", ma magari è una mia mancanza.
    oppure spiega che cosa voleva dire SECONDO TE l'autore, ed accetto la tua osservazione
    Secondo me l'autore (magari usando dei termini non proprio corretti) con
    Quando si definisce una funzione friend all'interno di una classe
    si riferiva semplicemente alla dichiarazione della funzione friend che va messa all'interno della definizione della classe... e leggendo il secondo post di zio_mangrovia non solo mi sembra di capire di averci preso, ma noto anche che con l'introduzione (a mio parere un po' forzata) della questione funzione/metodo tu abbia sollevato una questione che in realtà non c'era.
    innanzitutto non capisco come si distingue un metodo friend da una funzione globale friend.
    Poi non ho ben chiaro nel caso avessi 2 classi diverse (A e B) come possa accedere ai membri della classe A dall'interno di un metodo della classe B.
    Magari faccio un esempio?
    Il seguente codice dovrebbe chiarire entrambi i tuoi dubbi:
    #include <iostream>
    
    using namespace std;
    
    class A;
    
    class B
    {
    public:
        void metodo(const A&);
    };
    
    class A
    {
        int x = 5;
        friend void funzione(const A&);
        friend void B::metodo(const A&);
    };
    
    void B::metodo(const A &a)
    {
        cout << a.x << endl;
    }
    
    void funzione(const A &a)
    {
        cout << a.x << endl;
    }
    
    int main()
    {
        A a;
        B b;
        funzione(a);
        b.metodo(a);
    }
  • Re: Funzioni friend

    .
  • Re: Funzioni friend

    Figurati!
Devi accedere o registrarti per scrivere nel forum
8 risposte