Czasami chcielibyśmy przypisać jakąś stałą cechę do klasy. Nie konkretnych obiektów, a klasy samej w sobie. 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';
return 0;
}Przekształć klasę bazową Coordinates, tak aby miała funkcję statyczną
static size_t distance(const Coordinates& lhs, const Coordinates& rhs)Funkcja ta powinna zwracać dystans pomiędzy dwoma pozycjami.