Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Konstruktori ja Destruktori Periytymisessä | Perinnän Yleiskatsaus
Quizzes & Challenges
Quizzes
Challenges
/
C++ OOP

bookKonstruktori ja Destruktori Periytymisessä

Pohjaluokan konstruktori ensin

Periytymisessä konstruktorit ovat keskeisessä asemassa johdettujen luokkien oikeassa alustuksessa. Konstruktoreiden kutsumisjärjestyksen ymmärtäminen on olennaista periytymisen toimintaperiaatteiden hahmottamiseksi. Tarkastele alla olevan koodiesimerkin tulostetta nähdäksesi konstruktoreiden kutsujärjestyksen.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Huomio

Kun pohjaluokan konstruktori on suorittanut alustuksensa, suoritetaan johdetun luokan konstruktori.

Yläluokka kutsutaan ensin, koska sen täytyy alustaa aliluokan perityt jäsenet. Tämä varmistaa, että aliluokka aloittaa kelvollisessa tilassa ja voi luottaa kantaluokan alustettuun tilaan.

main.cpp

main.cpp

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

Esimerkissä konstruktori kutsutaan parametreilla alustajaluettelossa. Yläluokan konstruktori täytyy kutsua eksplisiittisesti alustajaluettelossa aliluokan konstruktorissa. Jos et määritä kantaluokan konstruktoria alustajaluettelossa, yläluokan oletuskonstruktori kutsutaan automaattisesti.

Johdetun luokan destruktori ensin

Kun olio tuhotaan, destruktorit kutsutaan käänteisessä järjestyksessä konstruktoreihin nähden. Tämä tarkoittaa, että destruktorit suoritetaan ensin johdetulle luokalle ja sen jälkeen jokaiselle kantaluokalle niiden määrittelyjärjestyksen vastaisesti.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Huomio

Vasta kun johdetun luokan destruktori on suorittanut siivouksensa, kantaluokan destruktori kutsutaan.

question mark

Mikä on oikea järjestys konstruktorien ja destruktorien kutsuille, kun luodaan ja tuhotaan johdetun luokan olio?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

bookKonstruktori ja Destruktori Periytymisessä

Pyyhkäise näyttääksesi valikon

Pohjaluokan konstruktori ensin

Periytymisessä konstruktorit ovat keskeisessä asemassa johdettujen luokkien oikeassa alustuksessa. Konstruktoreiden kutsumisjärjestyksen ymmärtäminen on olennaista periytymisen toimintaperiaatteiden hahmottamiseksi. Tarkastele alla olevan koodiesimerkin tulostetta nähdäksesi konstruktoreiden kutsujärjestyksen.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: Base() { std::cout << "Base constructor called" << std::endl; } }; class Derived : public Base { public: Derived() { std::cout << "Derived constructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Huomio

Kun pohjaluokan konstruktori on suorittanut alustuksensa, suoritetaan johdetun luokan konstruktori.

Yläluokka kutsutaan ensin, koska sen täytyy alustaa aliluokan perityt jäsenet. Tämä varmistaa, että aliluokka aloittaa kelvollisessa tilassa ja voi luottaa kantaluokan alustettuun tilaan.

main.cpp

main.cpp

copy
123456789101112131415161718
class Base { public: Base(int value) : data(value) {} private: int data; }; class Derived : public Base { public: Derived(int value) : Base(value) {} }; int main() { }

Esimerkissä konstruktori kutsutaan parametreilla alustajaluettelossa. Yläluokan konstruktori täytyy kutsua eksplisiittisesti alustajaluettelossa aliluokan konstruktorissa. Jos et määritä kantaluokan konstruktoria alustajaluettelossa, yläluokan oletuskonstruktori kutsutaan automaattisesti.

Johdetun luokan destruktori ensin

Kun olio tuhotaan, destruktorit kutsutaan käänteisessä järjestyksessä konstruktoreihin nähden. Tämä tarkoittaa, että destruktorit suoritetaan ensin johdetulle luokalle ja sen jälkeen jokaiselle kantaluokalle niiden määrittelyjärjestyksen vastaisesti.

main.cpp

main.cpp

copy
12345678910111213141516
#include <iostream> class Base { public: ~Base() { std::cout << "Base destructor called" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor called" << std::endl; } }; int main() { Derived derivedObj; }
Note
Huomio

Vasta kun johdetun luokan destruktori on suorittanut siivouksensa, kantaluokan destruktori kutsutaan.

question mark

Mikä on oikea järjestys konstruktorien ja destruktorien kutsuille, kun luodaan ja tuhotaan johdetun luokan olio?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4
some-alt