PDA

Visualizza la versione completa : [C++] Errore in metodi "getter" e "setter"


mlipreri
23-10-2007, 14:57
Ciao, in teoria con questo codice non mi dovrebbe settare l'int a 5 e poi stamparlo?
Io visualizzo questo output:

Start
: 12680352End

utente.h

#ifndef UTENTE_H_
#define UTENTE_H_

#include <string>
#include <iostream>
using namespace std;

class Utente
{
public:
Utente();
virtual ~Utente();

void setInt(int i);
int getInt();

int i;

};

#endif /*UTENTE_H_*/

utente.cpp

#include "Utente.h"
#include <string>
#include <iostream>
using namespace std;


Utente::Utente()
{
cout << "Start \n";
}

Utente::~Utente()
{
cout << "End \n";
}

int Utente::getInt(){
return i;
}

void Utente::setInt(int i){
cout << "setto: " + i;
i = i;
}

main(){
Utente u;
u.setInt(5);
cout << u.getInt();
}

Grazie

mlipreri
23-10-2007, 15:24
ho provato anche a fare il debug mettendo un breakpoint all'inizio del main e poi procedendo riga per riga ma la variabile i assume sempre un valore tipo 12568, cioè non 5....
grazie

Samuele_70
23-10-2007, 15:35
Nella funzione membro
void Utente::setInt(int i)
creavi una nuova variabile di nome i e ogni modifica restava circoscritta ad essa
e non a quella della classe, l'assegnazione i=i che hai usato non ti a fatto sorgere
qualche dubbio ? :zizi:


#include <string>
#include <iostream>
#include "Utente.h"
using namespace std;


Utente::Utente()
{
cout << "Costruttore\n";
i=0; // Inizializziamo la variabile
}

Utente::~Utente()
{
cout << "Distruttore\n";
}

int Utente::getInt(){
return i;
}

void Utente::setInt(int val) // Usiamo un nome diverso per la variabile
{
cout << "Setto i="<<val<<endl;
i=val;
// i = i; // <--- ?????! Inefficace
}

int main()
{
Utente u;
u.setInt(5);
cout<<"u.getInt()="<<u.getInt()<<endl;
return 0;
}
[B]

mlipreri
23-10-2007, 15:39
grazie mille funziona, è che pensavo che i = i funzionasse così:
la prima si riferiva alla variabile presente nel .h mentre la seconda i era quella che gli passavo :master: e invece :nonono:

:dhò:

bomber88
23-10-2007, 16:36
Per fare come dici tu bastava anche soltanto mettere al posto di
i=i

this->i=i;

Il puntatore this fa riferimento agli attributi e metodi della classe, utile quando si ha a che fare con parametri che hanno lo stesso nome di attributi della classe (come in questo caso).

mlipreri
23-10-2007, 16:43
grazie, io avevo provato con this.i pensavo che fosse la stessa cosa che in Java :dhò:

MacApp
23-10-2007, 19:44
Originariamente inviato da mlipreri
grazie, io avevo provato con this.i pensavo che fosse la stessa cosa che in Java :dhò:
Lìberati dei tuoi tabù adoloscenziali e.. dimenticati di Java! ;-)

oregon
23-10-2007, 19:46
Originariamente inviato da MacApp
e.. dimenticati di Java! ;-)

:D

Xaratroom
23-10-2007, 20:02
Ci avrei scommesso che java ti avesse modificato l'ego XD:

cout << "setto: " + i;
Mi raccomando, in c/cpp solitamente, non si può concatenare in quel modo ...

PS: potevi anche usare il risolutore di scope (Utente::i=i;) anche se non è molto corretto

mlipreri
24-10-2007, 09:02
Ok cercecherò di liberarmi! Si il "+" era un tentativo di concatenare stringhe :mame:
...me lo dimenticherò
:D

Loading