Pagina 1 di 2

C'è una buon'anima che mi aiuta con C++?

MessaggioInviato: ven mag 09, 2008 11:49 am
da Jack Jagoz
Salve mi servirebbero delucidazioni su C++. Vorrei avere solo alcuni chiarimenti.

La prima e piu' importante è:

Ho una classe con dati privati. Ergo ho messo metodi di set/get per accedervi.
In input, come faccio a modificare i dati della classe. Io avevo pensato:
creo delle variabili temporanee. Le uso per scrivervi i dati in input. Poi queste variabili le utilizzo col set(in una classe temporanea che poi mettero' in un vettore).

C'è qualcuno?

Grazie in anticipo :wink:

MessaggioInviato: ven mag 09, 2008 12:12 pm
da sl0wg33k * BANNED *
ma forse se scrivi le domande qualcuno arriva ;)

p.s. purtroppo io so solo fare "hello world!" e manco a memoria :D

MessaggioInviato: ven mag 09, 2008 12:45 pm
da Ste
scusa non hai funzioni pubbliche per lavorare sui dati privati? non ho ben capito cosa vorresti fare con le variabili temporanee

MessaggioInviato: ven mag 09, 2008 12:57 pm
da Jack Jagoz
Si ho messo delle funzioni di get e di set...Siccome son privati (i dati) devo utilizzare il set per mettere i dati in input nell'oggetto...

MessaggioInviato: ven mag 09, 2008 1:02 pm
da Dj^Hoke
eccomi :P

i metodi get & set servono proprio per modificare i dati della classe quando sono privati, dato che un cosa cosi MyClasse->dato = blabla; darebbe un exception

allora.. io programmo con il c# però se non ricordo male dato che è c-like
in c++ dovrebbe essere una cosa simile:

Codice: Seleziona tutto
public class MyClasse
{
    private int dato1;
    public int InsDato1;

   MyClasse() //costruttore
   {
      int dato1=0; //inizializzazione
   }

   public int InsDato
   {
       set{ dato1 = value;}
       get{ return dato1; }
   }

}


dovrebbe essere circa cosi.. ripeto potrebbe differire qualcosa dal c# ma è per rendere l'idea

MessaggioInviato: ven mag 09, 2008 1:09 pm
da Jack Jagoz
Si si..questo lo so..la definizione della classe la so..
Il mio problema è nel main..Cioe': chiedo di darmi il dato1 e devo schiaffarlo nel suo posto. Chiedo il dato2 e lo schiaffo nel suo posto ecc... ma come? io appunto proponevo di metterli in variabili temp che vengono poi usate come parametri del set...

void main(){

Costruttore classe

int a,b;

cout<<"dammi dato1";
cin>>a;
myclass.set1(a);
cout<<"dammi dato2";
cin>>b;
myclass.set2(b);

e poi metto il myclass in un vettore col pushback..

MessaggioInviato: ven mag 09, 2008 1:12 pm
da Dj^Hoke
mhmm perchè usare una funzione quando puoi fare direttamente cosi

cin>> myclass.dato1; ( o come si chiama )

ovviamente facendo attezione ai cast di tipo.. altrimenti posta il codice e vediamo di trovarti una soluzione perchè cosi non si capisce molto di quello che vuoi fare.. ;)

MessaggioInviato: ven mag 09, 2008 1:14 pm
da Jack Jagoz
beh certo questa è la soluzione piu' semplice ma dovrei mettere tutto in public ergo il metodi di set/get non servono piu' ad una cippa...

io vorrei sapere come mettere dei dati inseriti dall utente nell'oggetto avente pero' dati privati accessibili solo con metodi pubblici..

MessaggioInviato: ven mag 09, 2008 1:19 pm
da Dj^Hoke
senti posta il codice :wink: perchè ci sono mille soluzioni.. potrei anche usare il valore di ritorno della funzione get .. etc etc etc..

MessaggioInviato: ven mag 09, 2008 1:20 pm
da Jack Jagoz
vuoi che ti posto come lo farei io?

MessaggioInviato: ven mag 09, 2008 1:21 pm
da Dj^Hoke
si il codice della classe, per capire come hai strutturato tutto..

MessaggioInviato: ven mag 09, 2008 1:25 pm
da Jack Jagoz
ok è un programma di gestione delle previsioni del tempo...(progetto universitario.. s'era capito? :mrgreen: )

Codice:

#include <iostream>
#include <string>
#include <vector>

class previsione {
string citta;
date data;
int temperatura;
string tempo;
string vento;
int umidita;

void setcitta(string city){citta=city;}
void setdata(string city){} // devo definire il set della data..
void settempe(int temp){temperatura=temp;}
void settempo(string weather){tempo=weather;}
void setvento(string wind){vento=wind;}
void setumidita(int umidity){umidita=umidity;}

string getcitta() {return citta;}
date getdata () //defo sistemare anche il get della data
int gettempe () {return temperatura;)
string gettempo () {return tempo;}
string getvento () {return vento;}
int getumidita () {return umidita;)
};


Poi vabbe' devo metterci l'overload del << per mostrare tutto di una certa classe, ma questo non è un problema..

MessaggioInviato: ven mag 09, 2008 1:37 pm
da The Maus
:D Non è molto chiaro, quello che vuoi fare... ma se ho capito bene, il codice che hai postato dovrebbe andare bene allo scopo.

(magari nella set controlla che il valore input sia valido, nei range giusti, etc etc)

MessaggioInviato: ven mag 09, 2008 1:39 pm
da Jack Jagoz
La classe so che è giusta...Voglio solo sapere come allocare i dati inseriti dall'utente..

MessaggioInviato: ven mag 09, 2008 1:42 pm
da The Maus
allocare? intendi PIU valori in input da memorizzare internamente alla classe?

MessaggioInviato: ven mag 09, 2008 1:46 pm
da Jack Jagoz
si.. Devo chiedere all utente di inserire i dati della classe(citta', data, tempo ecc) poi inserire la classe(l oggetto) in un vettore...


Pero' in input separati..

esempio

dammi citta'
sistemo la citta' nella classe
dammi data
sistemo la data
ecc

MessaggioInviato: ven mag 09, 2008 1:47 pm
da Dj^Hoke
ahh.. ecco :D
e c'è bisogno di fare tutto sto casino ? un ciclo for .. et voilà.. ! ;)

MessaggioInviato: ven mag 09, 2008 1:50 pm
da Jack Jagoz
cioe'?non capisco dove c'azzecca il ciclo for..

MessaggioInviato: ven mag 09, 2008 1:53 pm
da Dj^Hoke
fai un ciclo x richiedere i dati in sequenza .. e poi per l'inserimento fai una cosa simile:

for(int i = 0; i <totrichieste>> Vettore[i];

MessaggioInviato: ven mag 09, 2008 1:54 pm
da The Maus
Ok, devi farti un vettore di classi 'previsione'.

Una roba tipo:

previsione Prevs[5000]; // Se conosci il nr esatto o se sai che saranno cmq sotto quella soglia..

ti setti l'indice di partenza:

int Idx = 0;

while( Idx < 5000 )
{
// Ricevi/imposti l'input utente (non sto a scrivere tutto il codice...

Prevs[ Idx ].setcitta( "torino" );
Prevs[ Idx ].setdata( "12/10/2008" );

etc.

// incrementi l'indice quando passi all'utente successivo.

Idx++;

}

(Scritto molto alla buona)

(Spero di aver capito bene)

MessaggioInviato: ven mag 09, 2008 2:01 pm
da Dj^Hoke
esatto.. quoto Maus.. lui è stato piu esplicativo..

per perfezionare puoi fare cosi

Prevs[ Idx ].setdata( cin.get() );

cin.get() fa la stessa cosa di cin >> a; solo che passi direttamente il valore alla funzione ed eviti l'allocazione di una variabile..

MessaggioInviato: ven mag 09, 2008 2:06 pm
da The Maus
:D eheh non uso la CIN da secoli (ormai sono un uomo MFC/.NET)

MessaggioInviato: ven mag 09, 2008 2:07 pm
da Jack Jagoz
Temo non mi sia spiegato bene o io non abbia capito bene le vostre idee..

Allora: ho fatto la classe. Nel main mettero ' un menu' col switch case...

Una delle opzioni sara'"aggiungi previsione per una data citta' ad un certa data...

Ed è in questa opzione che v'è il mio problema... Devo far riempire i dati di un nuovo oggetto all utente. Poi l oggetto lo metto nel vettore di previsioni col push_back...
Il tutto dentro magari un ciclo do.. while per continuare a creare nuove previsioni finchè vuole l'utente..

Spero di essermi spiegato :wink:

@Djhoke Leggo solo ora la risposta. ok allora faro' cosi'. Bueno, era la cosa che cercavo. Grazie..

MessaggioInviato: ven mag 09, 2008 2:08 pm
da Dj^Hoke
eh io C# quindi .NET ormai da 4 anni.. il c++ è un vecchio ricordo :suk

EDIT:

allora ti conviene usare una matrice.. in cui le colonne sono le città e le righe le varie date.. poi fai un vettore contenente il nome della città.. una cosa tipo questa:

char Città[totcittà] = "Milano","Roma", etc..

poi la matrice cosi

char Dati[totcittà, totgiorni];

quando prendi poi un dato usi l'id della colonna per passarlo all'array città in modo che ti stampi il nome..

quindi diciamo..

// prelievo dati
int id_Città = 2;
string dati = Dati[id_Città,10];
quando mandi in stampa i dati
fai cosi
cout >> "I dati per la città di" . Città[id_Città] . " Sono: ";

qua il for che stampa il contenuto

spero sia chiaro..

MessaggioInviato: ven mag 09, 2008 2:12 pm
da Jack Jagoz
Scusate..un ultima cosa..come faccio a inserire dati in una classe contenuta in un altra classe?
nel programma ho inserito una classe data(vedere piu' su)..

MessaggioInviato: ven mag 09, 2008 2:16 pm
da The Maus
@Jack... :wink: quindi il problema era solo di COME chiedere l'input all'utente?

:oops: Non ci sto capendo più una mazz...

MessaggioInviato: ven mag 09, 2008 2:17 pm
da Dj^Hoke
dio mio , non ci sto capendo piu una mazza :D

@Jack: Ok , però cerca di essere piu chiaro con le richieste :P

MessaggioInviato: ven mag 09, 2008 2:18 pm
da Jack Jagoz
Era banalmente come mettere i dati inseriti dall utente..

MessaggioInviato: ven mag 09, 2008 2:37 pm
da Dj^Hoke
oky.. l'importante è che hai risolto ! ;)

MessaggioInviato: ven mag 09, 2008 2:39 pm
da Jack Jagoz
ehm ci sarebbe un ultima cosettina.. nel mio terzultimo post :lol: