Anhang P
Überschreiben von Variablen
Obwohl es in der OOP fast ein Vergehen ist, aus Methoden heraus auf globale Daten zuzugreifen, ist diese jedoch nicht verboten.
Hierbei können zwei Fälle auftreten:
1. Fall: Gibt es innerhalb der Klasse kein Member mit dem gleichen Namen wie das globale Datum, reicht die alleinige Angabe des Variablennamens aus.
#include <print>
// Globales Datum
int value = 10;
// Klassendefinition
// Klasse enthaelt kein gleichnamiges Datum
class Any
{
public:
void PrintValue()
{
// Gibt globales value aus
std::println("value -> {}",value);
}
};
int main()
{
Any obj1;
obj1.PrintValue();
}
value -> 10
2. Fall: Enthält dagegen die Klasse eine Eigenschaft mit dem gleichen Namen wie das globale Datum, verdeckt die Eigenschaft das globale Datum. Um trotzdem auf das globale Datum zuzugreifen, wird vor dem Namen der globale Zugriffsoperator :: (zwei Doppelpunkte) gestellt.
#include <print>
// Globales Datum
int value = 10;
// Klassendefinition
// Klasse enthaelt kein gleichnamiges Datum
class Any
{
double value = 1.2;
public:
void PrintValue()
{
// Gibt Eigenschaft value aus
std::println("Any::value -> {}",value);
// Gibt globales value aus
std::println("::value -> {}",::value);
}
};
int main()
{
Any obj1;
obj1.PrintValue();
}
Any::value -> 1.2
::value -> 10