
Originariamente inviata da
ing82
Pensavo bastasse fare Classe::setMembro3(....); .....
Fino ad ora una cosa simile l'ho usata con le enum dichiarate public in un'altra classe (AltraClasse::enum_xxx), per i metodi pensavo valesse la stessa cosa.
Le enum sono delle costanti per cui è lecito. Per le funzioni e i dati è diverso, in più per i dati è necessaria una inizializzazione.
codice:
class HaveStatic {
public:
HaveStatic() : data(0) {}
static int something(int param);
int other();
static int sData;
int data;
};
// nel file .cpp
// inizializzazione dato statico.
int HaveStatic::sData = 0; // definizione obbligatoria.
int HaveStatic::something(int param) {
return sData * param;
}
int HaveStatic:: other() {
return data + 100;
}
// in main.cpp
int res = HaveStatic::something(20); // ok la funzione è static.
HaveStatic::sData = 10; // ok, sData è static.
res = HaveStatic::something(30);
// res = HaveStatic:: other(); No!, la funzione non è static, serve un'istanza della classe.
HaveStatic hs;
res = hs.other();
Non so se è solo un complicarsi la vita, ma allora potrei definire static il metodo public (a me serve poterlo richiamare senza istanziare la classe in certi casi), cambiare il prototipo in
static tipo3 calcMembro3(const double& parametro1, const double& parametro2);
e lasciare anche il metodo private
void setMembro3();
Di per se non è una complicazione, ma perdi in genericità. Magari più avanti scopri che tale funzione vuoi applicarla anche a, che so, Classe1, Classe2. E' questione di scelte che solo tu puoi conoscere. Comunque non hai accesso a membri non statici della classe.
Per quanto riguarda il metodo privato, francamente così è inutile. Più utile sarebbe renderlo pubblico e passargli come parametro il tipo3.
codice:
void Classe::setMembro3(tipo3 dato) {
mMembro3 = dato;
}
In modo che sia possibile in ogni momento cambiarne il valore.
Se questo non è previsto, allora imposta direttamente il dato dove ti serve.
Se ci fosse una sezione per principianti, quella sarebbe la mia:
Hai un testo di riferimento?