Signification de ":" dans un code c++

Résolu
mouad001 Messages postés 21 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 5 août 2014 - 5 août 2014 à 17:19
mouad001 Messages postés 21 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 5 août 2014 - 5 août 2014 à 21:28
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 août 2014 à 19:01
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
1
mouad001 Messages postés 21 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 5 août 2014
5 août 2014 à 21:28
merci cptpingu,

tu me facilite la vie.

--------
mouad.
0
Rejoignez-nous