§ 2. Класы
2.2. Канструктары
Для пачатковай ініцыялізацыі класа выкарыстоўваюцца канструктары. Канструктар — спецыяльны тып метаду класа, які аўтаматычна выклікаецца пры стварэнні аб'екта гэтага ж класа. Канструктары звычайна выкарыстоўваюцца для ініцыялізацыі палёў аб'екта класа (прыклад 2.3). У адрозненне ад звычайных метадаў канструктары маюць пэўныя правілы наймення:
У класе можа быць некалькі канструктараў. Канструктар, які не мае параметраў, называецца канструктарам па змоўчанні. Ён выклікаецца, калі карыстальнікам не пазначаны значэннi для ініцыялізацыі. Канструктары таксама могуць быць абвешчаныя з параметрамі, якія выкарыстоўваюцца для ініцыялізацыі палёў. У класе можна вызначыць любую колькасць канструктараў, кожны з якіх павінен мець унікальныя параметры. У канструктару можа быць выкарыстаны cпіс ініцыялізацыі палёў класа. Спіс ініцыялізацыі размяшчаецца пасля параметраў канструктара. Ён пачынаецца з двукроп'я (:), а затым значэнне для кожнага поля паказваецца ў круглых дужках. У целе канструктара не трэба выконваць аперацыі прысвойвання, таму цела канструктара можа быць пустым. Спіс ініцыялізацыі членаў класа не заканчваецца кропкай з коскай (прыклад 2.4). Кожны метад класа няяўна ўтрымлівае ў якасці поля даных паказальнік: IмяКласа *this; З яго дапамогай метад класа вызначае, з данымі якога аб'екта яму трэба будзе працаваць. Паказальнік this можна выкарыстоўваць у канструктарах (прыклад 2.5). Дэструктар класа — яшчэ адзін спецыяльны метад — выклікаецца пры знішчэнні аб'екта. Імя дэструктара аналагічна іменi канструктара, толькі ў пачатку ставіцца знак тыльды: ~. Дэструктар не мае ўваходных параметраў. Дэструктар заўсёды адзін. Для простых класаў (тых, якія толькі ініцыялізуюць значэннi звычайных уласцівасцей) дэструктар не патрэбны, так як C++ аўтаматычна выканае ачыстку памяці самастойна. Дэструктары не выклікаюцца карыстальнікам яўна. Аднак іх могуць бяспечна выклікаць іншыя метады класа, таму што аб'ект не знішчыцца да таго часу, пакуль не выканаецца дэструктар. |
Прыклад 2.3. Даданне канструктараў у клас Student.
Функцыя для ўводу даных з выкарыстаннем канструктара зменіцца наступным чынам:
Прыклад 2.4. Выкарыстанне спісу ініцыялізацыі пры апісанні канструктараў у класе Student.
Пераменныя ў спісе ініцыялізацыі атрымліваюць свае значэннi не ў тым парадку, у якім яны пазначаны, а ў тым парадку, у якім абвешчаны ў класе. Таму пры выкарыстанні спісаў ініцыялізацыі лепш захоўваць той жа парадак палёў, які зададзены пры апісанні класа. Прыклад 2.5. Выкарыстанне паказальніка this у канструктару класа Date.
|