[C++] Chiariemnto su c++

Messaggioda ZfreS » 22/09/2019, 14:08

Studiando da libro di Stroustrup arrivo al seguente esempio:
Codice:
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?
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1822 di 4589
Iscritto il: 22/10/2016, 17:52

Re: [C++] Chiariemnto su c++

Messaggioda claudio86 » 22/09/2019, 17:22

ZfreS ha scritto:Studiando da libro di Stroustrup arrivo al seguente esempio:
Codice:
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.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 526 di 1130
Iscritto il: 09/01/2011, 15:12

Re: [C++] Chiariemnto su c++

Messaggioda ZfreS » 23/09/2019, 13:12

Ah quindi si possono dichiarare funzioni memebro della classe Point nella classe stessa. Grazie per il chiarimento.
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 1824 di 4589
Iscritto il: 22/10/2016, 17:52

Re: [C++] Chiariemnto su c++

Messaggioda Raptorista » 24/09/2019, 09:01

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.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 5331 di 9616
Iscritto il: 28/09/2008, 19:58


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite