Obiekt statyczny klasy zapisany jako zmienne globalne

0

W Symfonii C++ natknąłem się na taki fragment kodu:

W klasie zostały zadeklarowane dwie zmienne statyczne a potem nad funkcją main jako globalne zostały zadeklarowane w taki sposób:

int pion::Pensja = 3000
int pion::ile_pionkow; 

Odwołujemy się do nich w taki sposób w funkcji main:

pion::_ilepionkow

I nie bardzo rozumiem potem pewnego wyjaśnienia z książki:

Typ składnika statycznego nie jest wzbogacony o nazwę klasy. To znaczy jego typ jest taki, jakby obiekt ten został zdefiniowany jako zwykła globalna.

Dlatego nasze oba składniki pensja, ile_pionkow, są po prostu typu iny.Gdyby nie był statyczne byłyby typu pion::int.

I nie rozumiem tego czemu pion::int a nie int pion::nazwazmiennej

dodanie znacznika <quote> - @furious programming

3
struct foo{
	int bar;
	static int qux;
};
&foo::bar

ma typ int foo::*

&foo::qux

ma typ int *.

0

I nie rozumiem tego czemu pion::int a nie int pion::nazwazmiennej

Bo mówimy o typie.

0

to jeśli bym chciał się odwołać do publicznej zmiennej z klasy to wyglądałoby to tak: ?

 pion::int nazwazmiennej
0

Nie. Aby odwołać się do niestatycznej zmiennej klasy potrzebujesz jej instancji.

T t;
t.nazwazmiennej;
0

Nadal nie mogę zrozumieć tego fragmentu z książki to jak mam:

pion::int, czyli chodzi o to że w obiekcie klasy pion jest zmienna typu int.
int pion::ile_pionkow, a tutaj jak to zrozumieć, bo przecież też deklaracja obiektu statycznego jest w klasie.

0

To jest definicja, nie deklaracja.

2
#include <iostream>
using namespace std;

struct A
{
	static int x;     // typ int
	int y;             // typ A::int
};
int A::x = 5;       // zmienna statyczna trzeba inicjalizowac

int main() 
{
	cout << A::x << endl;
	//cout << A::y << endl;     // to sie nie skompiluje
	A a;
	a.y = 6;
	cout << a.y << endl;
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1