Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Konstruktori-Initialisointilista | Konstruktorit ja Destruktorit
C++ OOP
course content

Kurssisisältö

C++ OOP

C++ OOP

1. C++:n OOP:n Perusteet
2. Konstruktorit ja Destruktorit
3. Kapseloinnin Yleiskatsaus
4. Perinnän Yleiskatsaus
5. Polymorfismin Yleiskatsaus

book
Konstruktori-Initialisointilista

Alustamislista mahdollistaa luokkajä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 helppokäyttöisiksi.

  • :(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

temperature_sensor.h

copy
1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Rajoitukset ja huomioitavaa

Yleinen väärinkäsitys liittyy alustamislistan alustuksen järjestykseen. Vastoin yleistä uskomusta, muuttujien alustaminen alustamislistassa ei noudata kirjoitusjärjestystä. Sen sijaan järjestys määrittyy luokan jäsenmuuttujien määrittelyjärjestyksen mukaan, ei alustamislistan järjestyksen perusteella.

main.cpp

main.cpp

copy
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; }
Note
Huomio

Yritä muuttaa total-muuttujan alustuksen järjestystä alustamislistassa ja muuttujan määrittelyssä class:in sisällä.

Kun käytät alustamislistoja konstruktorissa, parametrin nimi voi olla sama kuin luokan class attribuutin nimi.

main.cpp

main.cpp

copy
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 asettamalla quantity nollaksi argumentin sijaan.

1. Mikä on rakentajan alustamislista?

2. Mikä symboli aloittaa jäsenen alustamislistan rakentajassa?

question mark

Mikä on rakentajan alustamislista?

Select the correct answer

question mark

Mikä symboli aloittaa jäsenen alustamislistan rakentajassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

course content

Kurssisisältö

C++ OOP

C++ OOP

1. C++:n OOP:n Perusteet
2. Konstruktorit ja Destruktorit
3. Kapseloinnin Yleiskatsaus
4. Perinnän Yleiskatsaus
5. Polymorfismin Yleiskatsaus

book
Konstruktori-Initialisointilista

Alustamislista mahdollistaa luokkajä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 helppokäyttöisiksi.

  • :(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

temperature_sensor.h

copy
1234567
class TemperatureSensor { public: TemperatureSensor(int initialTemperature) : currentTemperature(initialTemperature) {} int currentTemperature; };

Rajoitukset ja huomioitavaa

Yleinen väärinkäsitys liittyy alustamislistan alustuksen järjestykseen. Vastoin yleistä uskomusta, muuttujien alustaminen alustamislistassa ei noudata kirjoitusjärjestystä. Sen sijaan järjestys määrittyy luokan jäsenmuuttujien määrittelyjärjestyksen mukaan, ei alustamislistan järjestyksen perusteella.

main.cpp

main.cpp

copy
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; }
Note
Huomio

Yritä muuttaa total-muuttujan alustuksen järjestystä alustamislistassa ja muuttujan määrittelyssä class:in sisällä.

Kun käytät alustamislistoja konstruktorissa, parametrin nimi voi olla sama kuin luokan class attribuutin nimi.

main.cpp

main.cpp

copy
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 asettamalla quantity nollaksi argumentin sijaan.

1. Mikä on rakentajan alustamislista?

2. Mikä symboli aloittaa jäsenen alustamislistan rakentajassa?

question mark

Mikä on rakentajan alustamislista?

Select the correct answer

question mark

Mikä symboli aloittaa jäsenen alustamislistan rakentajassa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 3
some-alt