PDA

View Full Version : static C++ VS static Java


Icedguardian
25-10-2003, 11:20
Avrei bisogno di realizzare il static del tipo Java in C++, cioè ho un vettore che voglio sia utilizzato da tutti gli oggetti di quella classe. Putroppo in C++ la dichiarazione del vettore non corrisponde alla sua definizione e quindi dovrei eseguire questo passaggio nel main (per es.) ma c'è la possibilità che la classe faccia sia la dichiarazione che la definizione internamente quando per es. viene istanziato il primo oggetto di quella classe senza dover intervenire "esternamente"????

Spero di aver spiegato bene il problema.

cionci
25-10-2003, 17:23
Così ti può andare bene ?

#include <vector>

using namespace std;

class TuaClasse {
static bool init;
static vector<int> vett;
void Init();
public:
TuaClasse();
};

bool TuaClasse::init = false;

void TuaClasse::Init()
{
if(init) return; //se è già inizializzato esci
//a questo punto qui fai l'inzializzazione del vettore
}

TuaClasse::TuaClasse()
{
Init();
//e qui fai le altre cose del costruttore
}

Icedguardian
26-10-2003, 11:13
Il tuo discorso è chiaro però se posso fare come dici tu allora posso fare direttamente

int TuaClasse::vettore[DIM];

che poi è quello che mi interessa, ma non riesco a capire quando viene eseguita quella istruzione e ovviamente se viene eseguita una volta soltanto?

Io ho bisogno di un vettore da condividere con tutti gli oggetti della classe PUNTO (non devo ne inizializzarlo ne niente).

fek
26-10-2003, 15:10
Originariamente inviato da Icedguardian
Avrei bisogno di realizzare il static del tipo Java in C++, cioè ho un vettore che voglio sia utilizzato da tutti gli oggetti di quella classe. Putroppo in C++ la dichiarazione del vettore non corrisponde alla sua definizione e quindi dovrei eseguire questo passaggio nel main (per es.) ma c'è la possibilità che la classe faccia sia la dichiarazione che la definizione internamente quando per es. viene istanziato il primo oggetto di quella classe senza dover intervenire "esternamente"????

Spero di aver spiegato bene il problema.



class A
{
private:

class AImpl
{
public:

static vector<int>& GetVector()
{
static vector<int> mStaticVector;
return mStaticVector;
}
};

public:
void UseVector()
{
vector<int>& static_vector = AImpl::GetVector();

// usalo qui
}
};



Viene inizializzato la prima volta che invochi GetVector(). Puoi fare piu' o meno la stessa cosa senza usare stl::vector. Paghi un "if" implicito ogni volta che invochi GetVector();