Dotyczy sposobu używania tych składników. W mojej książce można przeczytać, że:
Ma cechę external ale wtedy kiedy wstawimy do danego pliku - nagłówek z klasą. O to chodzi :?:
mojaklasa.h
#ifndef MOJAKLASA
#define MOJAKLASA
class mojaklasa
{
public:
static int obiekt_stat;
void funkcja();
};
#endif
1_plik.cpp
#ifndef MOJAKLASA
#define MOJAKLASA
class mojaklasa
{
public:
static int obiekt_stat;
void funkcja();
};
#endif
2_plik.cpp
#include
#include "mojaklasa.h"
using namespace std;
//////////////////////////////////////////////////
int mojaklasa::obiekt_stat;
void funkcja()
{
//ciało funkcji...
}
//////////////////////////////////////////////////
2 sprawa:
Pod koniec działu jest takie ćwiczenie jedno:
Chodzi o to, że obiekt statyczny ma typ, którego nazwa nie uwzględnia klasy. Tzn. jest po prostu int (a nie moja_klasa::int ). I dzięki temu, kompilator “domyśla się”, że jest to składnik statyczny :?:
To “cecha” języka, że musimy dołączać nagłówki(choć AFAIK tego standard nie wymaga) bo bez nich nie wie gdzie co jest. External informuje nas o tym, że dana wartość jest taka sama dla danej aplikacji(dla danego exeka).
Czasami ciężko zadania Grębosza zrozumieć Z tego co zrozumiałem chodzi o to:
Wcześniej musi nastąpić deklaracja klasy, więc kompilator ma informację, że istnieje klasa Klasa i ma składnik statyczny o nazwie XXX. Przy takiej składni nie może być to nic innego. Słowo kluczowe static w przestrzeni globalnej ma inne znaczenie. W sumie “static int Klasa::pole = 2” też mogłoby być, ale po co się powtarzać? Tak samo nie powtarza się słów kluczowych inline, virtual (o ile mnie pamięć nie myli).