initializer lists c
Exploreu tot sobre les llistes d'inicialitzadors en C ++ amb exemples detallats.
C ++ utilitza llistes d'inicialitzadors per inicialitzar els membres de les dades als seus valors.
Les llistes d’inicialitzadors s’utilitzen principalment en situacions específiques on no és possible inicialitzar els valors del cos del constructor.
obrint un fitxer eps a Windows
=> Feu clic aquí per obtenir el curs gratuït de C ++.
Llistes d'inicialitzadors a C ++
La sintaxi general de la llista Inicialitzador és:
constructorName(type value1, type value2):datamember(value1), datamember(value2) { //constructor code }
A continuació es detallen algunes d’aquestes situacions en què s’utilitzen les llistes d’inicialitzadors:
# 1) No es proporciona cap constructor per defecte per a la classe d'objectes membres.
Quan tenim un altre objecte de classe com a membre de la classe i la classe d’aquest objecte no té un constructor per defecte, inicialitzem aquest objecte membre de dades mitjançant la llista d’inicialitzadors.
Això es mostra al programa següent.
#include using namespace std; class A { int i; public: A(int ); }; A::A(int val) { i = val; cout << 'Constructor ::A ; i = ' << i << endl; } class B { A a; public: B(int ); }; B::B(int val):a(val) { cout << 'Constructor :: B'; } int main() { B obj(10); return 0; }
Sortida:
Constructor :: A; i = 10
Constructor :: B
Al programa anterior, l'objecte de la classe A és un membre de dades de la classe B. A la classe A, tenim un constructor parametritzat però no un constructor per defecte. Per tant, hem d’utilitzar la llista d’inicialitzadors a la classe B, per tal de crear objectes de classe A.
# 2) Inicialització C els nostres membres de dades.
Com que els membres de dades const només es poden inicialitzar una vegada, els inicialitzem mitjançant la llista d'inicialitzadors.
Ho demostrem mitjançant l'exemple següent.
#include using namespace std; class sample { private: const int val; public: sample(int val):val(val) { cout << 'Value is ' << val; } }; int main() { sample obj(10); }
Sortida:
El valor és 10
Al programa anterior, tenim una const com a membre de dades. Si hem d'inicialitzar aquest membre const a un valor, ho fem mitjançant la llista d'inicialitzadors tal com es mostra.
# 3) Per inicialitzar tipus de dades de referència.
Igual que les constants, les referències són immutables. Per tant, sempre que necessitem inicialitzar els membres de les dades de tipus de referència, fem servir llistes d’inicialitzadors.
Al programa següent, inicialitzem el membre de dades de referència mitjançant la llista d'inicialitzadors.
#include using namespace std; class sample { private: int &ref_val; public: sample(int &ref_val):ref_val(ref_val) { cout << 'Value is ' << ref_val; } }; int main() { int ref=10; sample obj(ref); return 0; }
Sortida:
El valor és 10
En aquest programa, tenim una referència com a membre de dades i la inicialitzem mitjançant la llista d’inicialitzadors.
# 4) Quan el nom del membre i el paràmetre tenen el mateix nom.
trobar diferència entre dos fitxers Linux
Quan els noms de membres d’una classe s’han d’inicialitzar amb els paràmetres i aquests paràmetres tenen els mateixos noms que els noms de membres, fem servir la llista d’inicialitzadors. Als temes anteriors, hem utilitzat aquest punter per a la mateixa situació. La segona opció és la llista d’inicialitzadors.
Hem modificat l'exemple anterior amb aquest punter per fer ús de la llista d'inicialitzadors al programa següent.
#include using namespace std; class Sample { private: int num; char ch; public: Sample(int num,char ch):num(num),ch(ch){ cout<<'num = '< Sortida:
num = 100
ch = A
En aquest programa, passem paràmetres per inicialitzar els membres de dades que tinguin els mateixos noms. En aquest cas, fem servir la llista d'inicialitzadors per a aquest propòsit.
# 5) Per millorar el rendiment
Cada vegada que inicialitzem els membres de dades al cos del constructor, es crea un objecte temporal per al membre de dades mentre s’assignen valors. Un cop feta l'assignació, aquest objecte temporal s'elimina. En realitat, això és una despesa general.
Si utilitzem la llista d’inicialitzadors, en canvi, s’utilitza un constructor de còpies per assignar valors. Això millora significativament el rendiment.
Conclusió
Així, en aquest tutorial, hem après sobre les llistes d'inicialitzadors junt amb moltes situacions en què cal utilitzar-les en la programació C ++.
Tot i que no hem d’utilitzar la llista d’inicialitzadors quan no hi ha aquestes situacions, sempre les podem utilitzar per millorar el rendiment del programa.
Al nostre proper tutorial, parlarem detalladament de les funcions d’amics en C ++.
=> Vegeu aquí per explorar la llista completa de tutorials de C ++.
Lectura recomanada