[C++] Chiariemnto su c++
Studiando da libro di Stroustrup arrivo al seguente esempio:
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?
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
"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.
Ah quindi si possono dichiarare funzioni memebro della classe Point nella classe stessa. Grazie per il chiarimento.
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].
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].