Czasami chcielibyśmy przypisać jakąś stałą cechę do klasy. Nie konkretnych obiektów, a klasy samej w sobie, tak, aby była ona wspólna dla wszystkich obiektów tej klasy. Np. każdy obiekt klasy ma nazwę "Object".
class Object {
public:
std::string getName() const { return name_; }
private:
const std::string name_ = "Object";
};W celu otrzymania nazwy tego obiektu, musimy najpierw utworzyć obiekt, a następnie zawołać getName().
int main() {
Object obj;
std::cout << obj.getName() << '\n';
}Nawet jeżeli obiekt zajmowałby dużo miejsca w pamięci, a my chcielibyśmy tylko jego nazwę i tak musimy go utworzyć, ponieważ tylko na nim możemy zawołać metodę getName().
Rozwiązaniem tej uciążliwości jest static. Co więcej, problem ten możemy rozwiązać na 2 sposoby. Nie musimy w ten sposób tworzyć specjalnie obiektu, aby dostać się do cechy klasy, jaką jest jej nazwa.
class ClassA {
public:
static std::string getName() { return "ClassA"; }
};
class ClassB {
public:
static std::string name_;
};
std::string ClassB::name_{"ClassB"};
int main() {
std::cout << ClassA::getName() << '\n';
std::cout << ClassB::name_ << '\n';
ClassA objA;
std::cout << objA.getName() << '\n';
ClassB objB;
std::cout << objB.name_ << '\n';
return 0;
}