Jak zadeklarować składową stałą w klasie? W Javie jest to bardzo proste – static final int CONSTANT = 5. W C# jeszcze prostsze – const int CONSTANT = 5. Zobacz, jak zrobić to w C++
Sposób nr 1
Wymaga on, by wartość stałej była znana już w momencie kompilacji:
// przykładowa klasa class ConstantExample1 { public: enum { CONSTANT_VALUE = 5 }; }; // przykład użycia int main() { ConstantExample1 ce1; int constant = ce1.CONSTANT_VALUE; return 0; }
Zaletą jest prosta deklaracja. Wadą – można w ten sposób zadeklarować jedynie stałą typu porządkowego – czyli int lub np. char, ale już nie float czy char*.
Sposób nr 2
Pozwala on określić wartość stałej w momencie tworzenie obiektu:
// przykładowa klasa class ConstantExample2 { public: const int CONSTANT_VALUE; ConstantExample2(const int num) : CONSTANT_VALUE(num) {} }; // przykład użycia int main() { ConstantExample2 ce2(5); int constant = ce2.CONSTANT_VALUE; return 0; }
Główną zaletą jest to, że możesz zadeklarować stałą dowolnego typu. Wadą – że wymaga dodatkowego wysiłku, mianowicie umieszczenia jej na liście inicjalizacyjnej konstruktora.
Wnioski
Sposób pierwszy pozwala stworzyć stałą, która będzie miała taką samą wartość dla wszystkich obiektów danej klasy.
Sposób drugi pozwala tworzyć stałą o innej wartości dla każdego obiektu.
April 28th, 2011 on 19:27
>Jak zadeklarować składową stałą w klasie?
>enum { CONSTANT_VALUE = 5 };
>const int CONSTANT_VALUE;
w 2 raczej static const int CONSTANT_VALUE;
May 4th, 2011 on 13:56
@sage:
w drugim przykladzie chodzi o to, żeby stworzyć stałą w zakresie obiektu, a nie klasy. Tak, żeby dany obiekt w momencie tworzenia ustawiał wartość stałej, ale tylko dla siebie. Dlatego – bez static.
September 20th, 2011 on 12:51
Dlatego przypadki te nie są kompatybilne
Rozmiary obiektów będą różne, w drugim przypadku
pojawi się dodatkowe pole z atrybutem const,
które na siłę da się zmienić w w trakcie działania programu!
September 21st, 2011 on 09:45
Na siłę rzecztywiście pewnie się da. W końcu stała to zwykła dana w pamięci, a my tylko umawiamy się (const), że nie będziemy jej zmieniać.