C++ CREAZIONE OGGETTI IN MANIERA CICLICA

di il
11 risposte

C++ CREAZIONE OGGETTI IN MANIERA CICLICA

Salve ragazzi ho un problema che non riesco a risolvere...in primis si parla di classi con applicazione di polimorfismo,ereditarietà e funzioni virtuali.
Ho notato durante lo svolgimento di alcuni esercizi che dopo aver definito le classi nel file.h ed aver implementato il tutto nel file.cpp quando vado nel main.cpp c'è una cosa che con le mie conoscenze mi risulta impossibile riuscire a inserire in maniera ciclica degli oggetti di una data classe...
faccio un esempio per essere il più chiaro possibile..
ho una classe STUDENTE avente come dati private tre stringhe nome,cognome,matricola.
da tastiera faccio inserire le tre stringhe è trovo STUDENTE UNO(STRING NOME,STRING COGNOME,STRING MATRICOLA) se voglio creare un secondo studente dovrò fare la stessa cosa
STUDENTE DUE(STRING NOME2,STRING COGNOME2,STRING MATRICOLA2) ma se sono 100 gli studenti nn potrò fare cosi per cento volte!!!!...
vorrei sapere come poter inserire questi cento valori in maniera ciclica tramite un ciclo for o un ciclo while...
spero di essere stato chiaro!!

11 Risposte

  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Ma questi 100 valori come li ottieni?
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Ciao,
    una semplice soluzione è quella di creare un oggetto, riempire i suoi campi e quindi memorizzarlo da qualche parte (ad esempio un vector). Quindi vai a sovrascrivere i campi dello stesso oggetto e lo memorizzi nuovamente.

    Esempio in quasi-pseudocodice:
    
    Studente stud;
    for(...) {
        stud.setNome(nome_letto);
        stud.setCognome(cognome_letto);
        ...
        vettore.push_back(stud);
    }
    
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Scusami ma in questo caso se lo ricollego al vector dovrei definirlo in queso modo nel main

    vector<studente>v1;
    ---dovrei creare un vettore di tipo studente è poi ad ogni giro
    incrementarlo con un'allocazione dinamica..pero visto che si tratta di
    allocazione dinamica nn posso usare l'oggetto studente ma dovrei definire
    un puntatore a studente;

    studente *ptr;
    -----definisco il puntatore a studente
    for(.....) -----cosa metto come parametri del for(io pensavo a begin() e end())..dovrei far
    scorrere il puntatore è deallocare dinamicamente con il new per ogni nuovo
    oggetto studente che creo???
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Il puntatore a Studente non serve, e gli iteratori non c'entrano mentre stai riempiendo il vettore. Se mai li userai per scorrerlo, una volta che lo hai riempito...

    Comunque ti ho preparato un semplice esempio per farti vedere il meccanismo:
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    
    class Numero
    {
    public:
    	Numero() {};
    	Numero(int n) {numero = n;}
    	int getNumero() {return numero;}
    	void setNumero(int n) {numero = n;}
    
    private:
    	int numero;
    };
    
    
    int main(int argc, char const *argv[])
    {
    	vector<Numero> vettore;
    
    	// creo un solo oggetto, poi lo riutilizzo
    	Numero num;
    
    	// riempio il vettore
    	for(int i=0; i<10; ++i) {
    		num.setNumero(i);
    		vettore.push_back(num);
    	}
    
    	// stampo i numeri che ho inserito
    	for(unsigned int i=0; i<vettore.size(); ++i) {
    		cout << vettore[i].getNumero() << endl;
    	}
    
    	cout << endl << "Oppure con gli iteratori..." << endl;
    	for(vector<Numero>::iterator it = vettore.begin(); it != vettore.end(); ++it) {
    		cout << (*it).getNumero() << endl;
    	}
    	
    	return 0;
    }
    
    Prova a guardarlo, poi ci fai sapere se hai altri dubbi.
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Ok ho capito come farlo....ti ringrazio tanto per l'aiuto
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Volevo farti un altra domanda:
    ho una classe che ha come membri private due oggetti di altre due classi e due interi:
    ti faccio sempre un esempio
    
    class numeri{
    public:
    numeri();
    private:
    int somma;
    int differenza 
    Pari uno
    Dispari due;
    
    pari e dispari sono le due classe che ho gia definito. Nel costruttore della classe numeri dovrò richiamare i costruttori di pari e dispari ??... mi faresti un esempio??
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    No, non devi richiamare nulla. Li dichiari come hai fatto e poi li utilizzi come vuoi.
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Un altra domanda....mi è capitato di dover lavorare con classi(ad esempio esame) che hanno come dati membro solo e soltanto un---- vector<studente*>elenco--- con studente che è un altra classe a se...
    ora come definisco il costruttore di esame???ovviamente il costruttore lo devo per forza definire..
    grz
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Anche in questo caso non ci devi mettere nulla. Un vector va solamente dichiarato: non è necessario fare altro. Se poi vorrai inserire un elemento nel vector allora farai, ad esempio, una push_back eccetera. Ma a livello di costruttore non devi fare nulla di particolare.
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Ciao sono di nuovo io:-)..
    volevo chiederti un'altra cosa..creò una classe di questo tipo
    class rubrica{
    public:
    void aggiungicontatto(contatto*);
    void modificacontatto(contatto*);
    void eliminacontatto(contatto*);
    virtual void stampa();
    private:
    vector<contatto*>contatti;

    io so stampare e inserire i contatti...con queste due funzioni tutto funziona correttamente ma nn riesco a eliminare e modificare un contatto...pensavo nn dovremmo ridefinire degli operatori???
    pensavo agli operatori = e []???se si mi fai vedere come fare grz
  • Re: C++ CREAZIONE OGGETTI IN MANIERA CICLICA

    Secondo me hai un po' di confusione... Se vuoi fare
    
    rubrica r;
    //...
    r[0] = ...;
    
    allora devi ridefinire l'operatore [] per accedere ad un contatto direttamente dall'oggetto rubrica.
    Ma questo non è necessario per modificare o eliminare un contatto dal vector: basta solo scrivere bene le due funzioni corrispondenti.

    Personalmente lascerei stare, per il momento, la ridefinizione degli operatori e mi concentrerei sul resto del codice.
Devi accedere o registrarti per scrivere nel forum
11 risposte