Diskuze: Staticke premenne v triedach
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
static int i
je deklarace. Jak správně říkáš, definice by
měla být jen jedna, měla by se tedy přesunout do .cpp souboru.
//X.h
class X
{
static int i;
public:
X();
};
//X.cpp
#include "X.h"
int X::i=1;
X::X() {
// ...
}
//main.cpp
#include "X.h"
int main()
{
X obj;
cout << obj.i; // prints value of i
}
Ve druhém případě se jedná o definici, správně by tělo metody mělo být implementované v .cpp souboru.
//funkce.h
void funkce();
//funkce.cpp
void funkce(){
static int cislo;
}
//main.cpp
#include "funkce.h"
int main(){
funkce();
}
Pokud není proměná inicializována (tak jak je to výše), je automaticky inicializována výchozí hodnotou (pro int je to 0). Jedná se tedy o definici.
Podla coho teda kompilator rozlisuje kedy ide o definiciu a kedy o deklaracie ak syntax je rovnaka? Ako vie ze v prvom pripade ( v definicii triedy ) nejde o definiciu a ze tam nema nastavyt vychodzu hodnotu 0?
Protože v prvním případě je zápis ve třídě zatímco ve druhém případě v metodě?
class X{
public:
int x;
};
void funkce(){
int x;
}
I tady je přece zápis naprosto stejný, přesto první je pouze deklarace zatímco druhé je definice.
Zobrazeno 4 zpráv z 4.