Найчастіше на конструктор покладається задача ініціалізації полів об’єкту класу. Для кожного об’єкту класу Counter конструктор виконує ініціалізацію поля count нулем. Але це робиться не звичайним способом, наприклад:
Counter()
{count=0; }
Така форма запису не рекомендується, хоча вона й не містить помилок. Ініціалізація в нашому прикладі відбувається інакше:
Counter():count(0) //Конструктор
{ };
Ініціалізація розміщена між прототипом методу і тілом функції, перед нею проставлена двокрапка. Ініціалізуюче значення поміщене в лапках після імені поля.
Якщо необхідно ініціалізувати відразу кілька полів класу, то значення розділяють комами і в результаті виходить список ініціалізації
someClass(): m1(7), m2(33), m3(4);
Причини, через які ініціалізація не проводиться в тілі конструктора, достатньо складні. Ініціалізація полів за допомогою списку ініціалізації відбувається до початку виконання тіла конструктора, що в деяких випадках буває важливо. Так, наприклад, список ініціалізації – це єдиний спосіб задати початкові значення констант і посилань. В тілі конструктора, як правило, відбуваються складніші дії, ніж звичайна ініціалізація.
Результати роботи програми з лічильником
Щоб переконатися. що конструктор викликається при кожному описі змінної об’єктного типу, дещо зміними вигляд конструктора:
Counter():count(0) //Конструктор
{cout << “constructor”<<endl; };
і запустимо програму на виконання. Фраза «constructor» з’явиться на екрані двічі.
Конструктори і власні типи даних
Розробники компіляторів повинні потурбуватися, щоб для будь-якої змінної стандартного типу, яку програміст визначає у своїй програмі, викликався необхідний конструктор. Наприклад, якщо в програмі зустрічається змінна цілого типу, десь повинен існувати конструктор, який виділить для цієї змінної 4 байти пам’яті. Таким чином, навчившись створювати власні конструктори, ми можемо виконувати задачі, з якими стикаються розробники компіляторів. Ми зробили ще один крок на шляху до створення власних типів даних.