@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);
}