Signification de ":" dans un code c++ [Résolu]

Signaler
Messages postés
21
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
5 août 2014
-
mouad001
Messages postés
21
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
5 août 2014
-
Bonjour,

je suis entrain de convertir un code c++ en c pour le compiler dans ma montre Pebble, mon problème est que je ne comprend pas la syntaxe d'une fonction ( le ':' utilisé après la déclaration de la fonction prayertimes):

PrayerTimes(CalculationMethod calc_method = Jafari,
			JuristicMethod asr_juristic = Shafii,
			AdjustingMethod adjust_high_lats = MidNight,
			double dhuhr_minutes = 0)
	: calc_method(calc_method)
	, asr_juristic(asr_juristic)
	, adjust_high_lats(adjust_high_lats)
	, dhuhr_minutes(dhuhr_minutes)
	{
		method_params[Jafari]  = MethodConfig(16.0, false, 4.0, false, 14.0);	// Jafari
		method_params[Karachi] = MethodConfig(18.0, true,  0.0, false, 18.0);	// Karachi
		method_params[ISNA]    = MethodConfig(15.0, true,  0.0, false, 15.0);	// ISNA
		method_params[MWL]     = MethodConfig(18.0, true,  0.0, false, 17.0);	// MWL
		method_params[Makkah]  = MethodConfig(19.0, true,  0.0, true,  90.0);	// Makkah
		method_params[Egypt]   = MethodConfig(19.5, true,  0.0, false, 17.5);	// Egypt
		method_params[Custom]  = MethodConfig(18.0, true,  0.0, false, 17.0);	// Custom
	}

pour le fichier complet :
http://praytimes.org/code/git/?a=viewblob&p=PrayTimes&h=5f43359fa9a38ac597acdf67a3589bee24fd64f0&hb=HEAD&f=v1/cpp/prayertimes.hpp

je me demande si cette syntaxe est vraie si oui, y-a-t'il quelu'un qui peut m'expliquer un peu de quoi il s'agit

merci par avance.

2 réponses

Messages postés
3804
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
30 janvier 2020
96
Bonjour.

Oui la syntaxe est bonne, c'est ce qu'on appelle une liste d'initialisation. C'est une bonne pratique et si tu fais du C++ sérieusement, tu n'utilises normalement que ça :).

Exemple:
MaClasse::MaClasse()
 : _attrib1(435), _attrib2("toto")
{
}


Équivaut (presque) à:

MaClasse::MaClasse()
{
  _attrib1 = 435;
  _attrib2 = "toto";
}


On se sert de la liste d'initialisation pour initialiser des attributs non initialisables sinon.

Exemple
class Toto
{
  int& _ref_i;
  const int _cst_i;
};

Toto::Toto(int i)
 : _ref_i(&i), _cst_i(i) // valide
{
}

Toto::Toto(int i)
{
  _ref_i = &i; // invalide, on ne peut modifier une ref par affectation
  _cst_i = i; // invalide, on ne peut modifier une valeur constante
}


Dans cette classe, on ne peut affecter de valeur à _ref_i et _cst_i que s'ils sont dans une liste d'initialisation. C'est la raison pour laquelle on initialise toujours des attributs avec une liste d'initialisation et jamais dans le corps du constructeur.

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Messages postés
21
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
5 août 2014

merci cptpingu,

tu me facilite la vie.

--------
mouad.