Kursusindhold
C++ OOP
C++ OOP
Statisk Medlemmer af Klassen
I objektorienteret programmering har nøgleordet static
en særlig betydning, idet det ændrer adfærden for attributter og metoder. Der opstår nogle gange situationer, hvor visse data skal deles mellem alle objekter af en klasse i stedet for at blive duplikeret for hver instans. Det er her, statisk data-medlemmer kommer ind i billedet.
Syntaksen for statiske medlemmer
Oprettelse af et statisk medlem af en klasse er ligetil. Du skal blot tilføje nøgleordet static
foran deklarationen.
Example.h
class Example { public: static int static_attibute; static void static_method() { std::cout << "Static method!" << std::endl; } };
I ovenstående eksempel er static_attribute
og static_method()
erklæret som statisk datamedlemmer af class Example
. I modsætning til almindelige datamedlemmer er statiske datamedlemmer tilknyttet klassen selv i stedet for individuelle objekter. Dette betyder, at alle instanser af Example
deler de samme statisk medlemmer.
Initialisering er afgørende for statiske datamedlemmer, og det skal ske uden for klassen, medmindre medlemmet også bruger nøgleordet const
.
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;
Fordele ved at bruge statiske medlemmer
Brugen af statiske datamedlemmer og statiske medlemsfunktioner giver flere fordele.
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 }
Tak for dine kommentarer!