Konstruktori-Initialisointilista
Alustamislista mahdollistaa luokan jäsenten alustamisen ennen konstruktorin rungon suorittamista. Tämä on erityisen hyödyllistä monimutkaisessa alustuksessa tai käytettäessä olioita, joiden luokissa on const-jäseniä.
Alustamislistan syntaksi
Alustamislistojen syntaksi voi vaikuttaa monimutkaiselta ja hämmentävältä. Saattaa tuntua helpommalta käyttää pelkkää konstruktoria. Ohjelman kasvaessa alustamislistat kuitenkin osoittautuvat käteviksi ja selkeiksi käyttää.
-
:(kaksoispiste): esittelee jäsenen alustamislistan konstruktorissa; -
jäsen (arvo): luokan jäsenmuuttuja, joka alustetaan arvolla (konstruktorille välitetty argumentti);
-
{ }(Aaltosulkeet): konstruktorin runko, jossa voidaan suorittaa lisäkoodia jäsenen alustamisen jälkeen.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Rajoitukset ja huomioitavaa
Yleinen väärinkäsitys liittyy alustamislistan alustuksen järjestykseen. Vastoin yleistä uskomusta, alustamislistassa olevien muuttujien alustaminen ei tapahdu siinä järjestyksessä kuin ne on kirjoitettu. Sen sijaan järjestys määritellään luokan jäsenmuuttujien määrittelyjärjestyksen mukaan, ei alustamislistan järjestyksen perusteella.
main.cpp
123456789101112131415#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Yritä muuttaa total-muuttujan alustuksen järjestystä alustamislistassa ja muuttujan määrittelyssä class:in sisällä.
Kun käytät alustamislistoja konstruktorissa, argumentin nimi voi olla sama kuin class-attribuutin nimi.
main.cpp
123456789101112131415#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Mutta jos käytät samaa nimeä sekä jäsenmuuttujille että argumenteille, total saa kerrottujen argumenttien arvon, ei jäsenten. Tämän näet, jos asetat quantity-arvoksi nollan argumentin sijaan.
1. Mikä on konstruktorin alustamislista?
2. Mikä symboli aloittaa jäsenen alustamislistan konstruktorissa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Mahtavaa!
Completion arvosana parantunut arvoon 3.13
Konstruktori-Initialisointilista
Pyyhkäise näyttääksesi valikon
Alustamislista mahdollistaa luokan jäsenten alustamisen ennen konstruktorin rungon suorittamista. Tämä on erityisen hyödyllistä monimutkaisessa alustuksessa tai käytettäessä olioita, joiden luokissa on const-jäseniä.
Alustamislistan syntaksi
Alustamislistojen syntaksi voi vaikuttaa monimutkaiselta ja hämmentävältä. Saattaa tuntua helpommalta käyttää pelkkää konstruktoria. Ohjelman kasvaessa alustamislistat kuitenkin osoittautuvat käteviksi ja selkeiksi käyttää.
-
:(kaksoispiste): esittelee jäsenen alustamislistan konstruktorissa; -
jäsen (arvo): luokan jäsenmuuttuja, joka alustetaan arvolla (konstruktorille välitetty argumentti);
-
{ }(Aaltosulkeet): konstruktorin runko, jossa voidaan suorittaa lisäkoodia jäsenen alustamisen jälkeen.
temperature_sensor.h
1234567class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };
Rajoitukset ja huomioitavaa
Yleinen väärinkäsitys liittyy alustamislistan alustuksen järjestykseen. Vastoin yleistä uskomusta, alustamislistassa olevien muuttujien alustaminen ei tapahdu siinä järjestyksessä kuin ne on kirjoitettu. Sen sijaan järjestys määritellään luokan jäsenmuuttujien määrittelyjärjestyksen mukaan, ei alustamislistan järjestyksen perusteella.
main.cpp
123456789101112131415#include <iostream> class Exchanger { public: Exchanger(float _quantity, float _rate) : quantity(_quantity), rate(_rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Yritä muuttaa total-muuttujan alustuksen järjestystä alustamislistassa ja muuttujan määrittelyssä class:in sisällä.
Kun käytät alustamislistoja konstruktorissa, argumentin nimi voi olla sama kuin class-attribuutin nimi.
main.cpp
123456789101112131415#include <iostream> class Exchanger { public: Exchanger(float quantity, float rate) : quantity(quantity), rate(rate), total(quantity * rate) {} float quantity, rate, total; }; int main() { Exchanger exchanger(100, 0.3); std::cout << exchanger.total; }
Mutta jos käytät samaa nimeä sekä jäsenmuuttujille että argumenteille, total saa kerrottujen argumenttien arvon, ei jäsenten. Tämän näet, jos asetat quantity-arvoksi nollan argumentin sijaan.
1. Mikä on konstruktorin alustamislista?
2. Mikä symboli aloittaa jäsenen alustamislistan konstruktorissa?
Kiitos palautteestasi!