[C++] Chiariemnto su c++

oleg.fresi
Studiando da libro di Stroustrup arrivo al seguente esempio:
struct Point
{
     int x, y, z;
     constexpr Point up(int d) {return {x, y, z + d;} }
     //ecc.
}


Non capisco come ha fatto a dichiarare una funzione del tipo della classe Point nella classe Point, cioè ancora prima che la classe fosse completa. Se non sbaglio questo si poteva fare solo con puntatori.
Potreste spiegarmi perchè questo è lecito?

Risposte
claudio862
"ZfreS":
Studiando da libro di Stroustrup arrivo al seguente esempio:
struct Point
{
     int x, y, z;
     constexpr Point up(int d) {return {x, y, z + d;} }
     //ecc.
}


Non capisco come ha fatto a dichiarare una funzione del tipo della classe Point nella classe Point, cioè ancora prima che la classe fosse completa. Se non sbaglio questo si poteva fare solo con puntatori.
Potreste spiegarmi perchè questo è lecito?


Mi sa che ti stai confondendo con il fatto di creare una classe (o struttura, che è uguale) che contiene una variabile membro del suo stesso tipo.

La sintassi che hai postato tu invece è semplicemente la dichiarazione di una funzione membro.
Inoltre, è equivalente a definire il corpo della funzione una volta chiusa la dichiarazione della classe, quindi puoi accedere a funzioni e variabili membri dichiarati dopo quella funzione.

oleg.fresi
Ah quindi si possono dichiarare funzioni memebro della classe Point nella classe stessa. Grazie per il chiarimento.

Raptorista1
ZfreS: fai attenzione a distinguere dichiarazione e definizione.
Tutte le funzioni membro devono essere dichiarate nella dichiarazione della classe. La loro definizione può essere fornita sia nella dichiarazione della classe, sia da un'altra parte.
Le funzioni definite nella dichiarazione della classe sono implicitamente marcate [inline]inline[/inline].

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.