Skip to content

Latest commit

 

History

History
80 lines (59 loc) · 2.01 KB

File metadata and controls

80 lines (59 loc) · 2.01 KB

Programowanie obiektowe

Pola i funkcje statyczne

Coders School

Pola klasy

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().


static

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;
}