Obiekt statyczny klasy zapisany jako zmienne globalne

Obiekt statyczny klasy zapisany jako zmienne globalne
N3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 420
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:

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

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

Kopiuj
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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
3
Kopiuj
struct foo{
	int bar;
	static int qux;
};
Kopiuj
&foo::bar

ma typ int foo::*

Kopiuj
&foo::qux

ma typ int *.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

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

Bo mówimy o typie.

N3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 420
0

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

Kopiuj
 pion::int nazwazmiennej
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

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

Kopiuj
T t;
t.nazwazmiennej;
N3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 420
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.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

To jest definicja, nie deklaracja.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2
Kopiuj
#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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.