Kurssisisältö
C++ OOP
C++ OOP
Luokan Staattiset Jäsenet
Olio-ohjelmoinnissa static
-avainsanalla on erityinen merkitys, sillä se muuttaa attribuuttien ja metodien käyttäytymistä. Joskus on tilanteita, joissa tiettyjen tietojen täytyy olla jaettuina kaikille luokan olioille sen sijaan, että ne kopioitaisiin jokaiselle ilmentymälle erikseen. Tässä kohtaa staattiset tietojäsenet tulevat käyttöön.
Staattisten jäsenten syntaksi
Luokan staattisen jäsenen luominen on yksinkertaista. Sinun tarvitsee vain lisätä määrittelyn eteen static
-avainsana.
Example.h
class Example { public: static int static_attibute; static void static_method() { std::cout << "Static method!" << std::endl; } };
Yllä olevassa esimerkissä static_attribute
ja static_method()
on määritelty luokan class Example
staattisiksi jäsentiedoiksi. Toisin kuin tavalliset jäsentiedot, staattiset jäsentiedot liittyvät luokkaan itseensä eivätkä yksittäisiin olioihin. Tämä tarkoittaa, että kaikki Example
-luokan ilmentymät jakavat samat staattiset jäsenet.
Staattisten jäsentietojen alustaminen on olennaista, ja se on tehtävä luokan ulkopuolella, ellei jäsen käytä myös const
-avainsanaa.
FirstExample.h
SecondExample.h
class Example { public: static int static_attribute; static void static_method() { std::cout << "Static method!" << std::endl; } }; int Example::static_attribute = 0;
Staattisten jäsenten käytön edut
Staattisten tietojäsenten ja staattisten jäsenfunktioiden käyttö tarjoaa useita etuja.
main.cpp
#include <iostream> class Example { public: static int static_attribute; static void static_method() { std::cout << "Static method!" << std::endl; } }; // Initialization of the static member variable int Example::static_attribute = 0; int main() { Example obj1, obj2; obj1.static_attribute = 100; // Modifying static_attribute through obj1 std::cout << obj1.static_attribute << std::endl; std::cout << obj2.static_attribute << std::endl; Example::static_attribute = 25; // Modifying static_attribute through class Example::static_method(); // Calling the static method through class }
Kiitos palautteestasi!