Point de syntaxe C++ pour un noob siouplait

Point de syntaxe C++ pour un noob siouplait - C++ - Programmation

Marsh Posté le 02-05-2016 à 09:09:36    

Bonjour

 

Je découvre le c++, je lis des tutoriaux, mais pour l'instant, je bloque sur cette syntaxe. Elle doit être expliquée dans des tutoriaux de plus haut niveau que ceux que j'ai lu jusque là.

 

Donc, c'est peut être obvious de chez obvious, mais vous me feriez gagner du temps, à vot bon coeurs m'sieur dame, pour une vieux programmeur nécessiteux de la tête  :jap:

 

Cellule::Cellule(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
    Cloison = NewObject<AClosion>();
}

 

Le :Super(ObjectInitializer) veux dire qu'on me passe un objet et que son constructeur va être appelé automatiquement ?

 

Ou autre complètement autre chose ?

 

Ca me semble louche de recevoir une pointeur sur un objet qui ne serait pas déjà passé par la case constructeur.


Message édité par Marco Paulo le 02-05-2016 à 09:10:27
Reply

Marsh Posté le 02-05-2016 à 09:09:36   

Reply

Marsh Posté le 02-05-2016 à 14:16:21    

C'est la syntaxe pour appeler le constructeur de ta classe parent

Code :
  1. class A
  2. {
  3. public:
  4.   A() : value( 0 ) {}
  5.   A(int i) : value( i ) {}
  6.   int value;
  7. };
  8. class B : public A
  9. {
  10.   B() {} // appelle le constructeur par défault de A, donc A::A()
  11.   B( int i ) : A( i ) {} // on appelle explicitement le constructeur de A qui convient
  12. };



---------------
last.fm
Reply

Marsh Posté le 02-05-2016 à 15:42:57    

C'est une forme de déclaration pour être sur de ne pas oublier d'appeler le constructeur parent ?
Parce qu'on aurait pu le faire dans le corps du constructeur de B, j'imagine.

 

Merci de ta réponse. :jap:

Message cité 1 fois
Message édité par Marco Paulo le 02-05-2016 à 15:44:42
Reply

Marsh Posté le 02-05-2016 à 16:07:03    

Marco Paulo a écrit :

C'est une forme de déclaration pour être sur de ne pas oublier d'appeler le constructeur parent ?  
Parce qu'on aurait pu le faire dans le corps du constructeur de B, j'imagine.
 
Merci de ta réponse. :jap:  


 
Non.
1/ on ne peut pas "oublier" d'appeler le constructeur parent (dans mon exemple, le premier constructeur de B appelle bien le constructeur de A)
2/ on n'aurait pas pu le faire dans le corps de B. L'ordre de construction des classes et de leurs members est strictement défini. Quand tu entres dans le corps du constructeur de B, tu as la garantie que toutes les classes dont tu dérives sont initialisées et que les constructeurs par défaut de tes membres ont été appelés (avec un cas particulier pour les types primitifs comme int, float et autres, qui ne sont pas initialisés par défaut)


---------------
last.fm
Reply

Marsh Posté le 02-05-2016 à 16:48:09    

theshockwave a écrit :

 

Non.
1/ on ne peut pas "oublier" d'appeler le constructeur parent (dans mon exemple, le premier constructeur de B appelle bien le constructeur de A)
2/ on n'aurait pas pu le faire dans le corps de B. L'ordre de construction des classes et de leurs members est strictement défini. Quand tu entres dans le corps du constructeur de B, tu as la garantie que toutes les classes dont tu dérives sont initialisées et que les constructeurs par défaut de tes membres ont été appelés (avec un cas particulier pour les types primitifs comme int, float et autres, qui ne sont pas initialisés par défaut)

 

Woki, merci, c'est précieux comme information. Je ne l'avais pas lu jusque là, ça clarifie pas mal de points :jap:

 

Big thank


Message édité par Marco Paulo le 02-05-2016 à 16:49:29
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed