Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C/C++] Creare un ulteriore oggetto

    Ciao...
    Devo fare un programma che funzioni così: quando l'utente clicca col mouse in un punto della mia finestra, devo mettere un oggetto in quel punto...
    Ho creato la finestra e so vedere quando l'utente ci clicca sopra. So in che punto clicca e sono in grado di metterci un oggetto a mia scelta, il problema è come CREARE un nuovo oggetto...
    Non posso utilizzare un array, perchè dovrei definirlo prima di inserire il primo oggetto, e in quel momento non so quanti oggetti verranno messi nel programma...
    Come posso fare? E poi come identifico quell'oggetto se voglio farci delle operazioni?

    Grazie...

    (Penso che sia necessario usare NEW e DELETE, ma non so usarli bene )

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    26
    Mi pare che la tua intuizione sia giusta.... Per allocare un nuovo oggetto in fase di esecuzione devi crearti un puntatore ad esso e utilizzare new in questo modo:

    ptr_oggetto=new Classe_oggetto(eventuale costruttore);

    se la ia memoria nn inganna dovrebbe essere giusto....

  3. #3
    Originariamente inviato da Leevon
    Mi pare che la tua intuizione sia giusta.... Per allocare un nuovo oggetto in fase di esecuzione devi crearti un puntatore ad esso e utilizzare new in questo modo:

    ptr_oggetto=new Classe_oggetto(eventuale costruttore);

    se la ia memoria nn inganna dovrebbe essere giusto....
    Avevo pensato che si facesse così...
    Il problema è: come identifico quell'oggetto?
    Voglio dire... Si chiamano tutti 'ptr_oggetto'... E se io volessi compiere dei calcoli su una proprietà degli oggetti?

    se avessi un'array di oggetti farei:
    codice:
    for (int i = 0; i < lunghezzaarray; i++) {
       sommax = ogetto[i].x;
    }
    Ma lì non ho un array, nè posso inizializzarne uno poichè dovrei farlo prima di creare il primo oggetto, ma in quel momento non saprei che dimensione dargli

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    26
    Se puoi allocare dinamicamente un oggetto, puoi farlo anche per un array di oggetti....Pensaci un pò...

    Per accedere ad un metodo di un oggetto allocato dinamicamente si utilizza la stessa sintassi che si usa per i record allocati dinamicamente:

    ptr_oggetto->metodo();

  5. #5
    Originariamente inviato da Leevon
    Se puoi allocare dinamicamente un oggetto, puoi farlo anche per un array di oggetti....Pensaci un pò...
    Già... Ma dovrei fare così ogni volta che viene creato un nuovo oggetto:
    creare con NEW un nuovo array grosso quanto il precedente + 1;
    spostare tutti gli elementi del vecchio array in quello nuovo;
    deallocare con DELETE il vecchio array che non serve più;
    inserire il nuovo oggetto nell'ultimo posto del nuovo array
    giusto? Non si può fare qualcosa di più semplice? (intendo più semplice per il computer... Questo richiede di fare almeno tre operazioni non necessarie...)



    Ho trovato cercando con google un programma che funziona così:
    all'inizio, nel main viene creato un ptr_oggetto di base, con tutte le proprietà su NULL o su 0.
    nella classe dell'oggetto ci sono due puntatori agli oggetti della classe stessi, chiamati NEXT e PREV.
    E la classe è fatta così (ehm... a dire la verità è una struttura, non una classe... Era un codice in c, ma è uguale...):

    struct Classe_oggetto
    {
    Classe_oggetto *PREV, *NEXT;
    int x;
    };


    Quando creo un nuovo oggetto viene richiamata la funzione NEWOBJ (passandogli come parametro ptr_oggetto) che è fatta così:

    void NEWOBJ (Classe_oggetto ptr_oggetto)
    {
    while (ptr_oggetto->next != NULL) ptr_oggetto=ptr_oggetto->NEXT;
    ptr_oggetto->NEXT=new Classe_oggetto();
    ptr_oggetto->NEXT->PREV=ptr_oggetto;
    ptr_oggetto->PREV->NEXT=ptr_oggetto;
    ptr_oggetto->NEXT->NEXT=ptr_oggetto;
    ptr_oggetto->NEXT->x=0;
    }


    e quando c'è bisogno di fare un'operazione sulla X di tutti gli oggetti si usa questa funzione:

    int SOMMAX (Classe_oggetto ptr_oggetto)
    {
    int somma;
    while (ptr_oggetto->next != NULL) somma=ptr_oggetto->NEXT
    return somma;
    }



    ehm... Dite che è perfetto o ci può essere di meglio?

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Se sai usare la STL, potresti usare il container vector e ci metti dentro tutti gli oggetti.

    Se non sai usarla, ti mostriamo noi

  7. #7
    Mostratemi voi, allora
    Viene un programma migliore usando quella-cosa-lì al posto di ciò che ho proposto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    26
    Mi si perdoni l'ignoranza, ma non conosco queste STL...Io sono di quelli che le librerie se le scrivono da soli(W la programmazione a basso livello!!).... Sicuramente usare queste STL è più semplice e ti conviene, ma se vuoi imparare ti consiglio di provare ad implementarti una lista che contenga il buffer degli oggetti...
    A te la scelta!

  9. #9
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ecco un esempio che usa la STL (Standard Template Library):

    codice:
    #include <iostream>
    
    #include <vector>
    
    using namespace std;
    
    
    //Una classe per provare
    class Classe
    {
    	int x, y;
    public:
    	Classe() {
    		x=0;
    		y=0;
    	}
    	Classe(int a, int b) {
    		x=a;
    		y=b;
    	}
    	int Classe::getx() {
    		return x;
    	}
    	int Classe::gety() {
    		return y;
    	}
    	~Classe() {
    	}
    };
    
    void main()
    {
    	//Dichiarazione del vettore oggetti
    	vector<Classe> oggetti(0);
    	
    	//Aggiuge 10 oggetti (in questo caso solo interi)
    	int i;
    	for (i=0; i<10;i++)
    	{
    		oggetti.push_back(Classe(i,i*2));
    	}
    	//Da notare che si ridimensiona da solo!
    
    	//Aggiungo altri oggetti
    	for(;i<20;i++)
    		oggetti.push_back(Classe(i*3,i*5));
    
    	cout << "Numero oggetti: " << oggetti.size() << endl;
    	
    	for(i=0;i<(int)oggetti.size(); i++)
    	{
    		cout << i << endl;
    	}
    	
    }
    La STL è una delle parti + importanti e utili inserite nello standard C++. E fa risparmiare molto lavoro.


    Se nn capisci qualcosa ,chiedi pure!

  10. #10
    Ah... I vettori
    Sì, ho capito che sono... Li ho usati col Java... Che brutti ricordi che ho di loro e del Java in generale
    Sono comodi... Ma in questo caso... Mi danno un reale vantaggio?
    Voglio dire... Che cambia tra usare i vettori o il codice che ho trovato su google?
    E' la stessa cosa fatta in due modi diversi, ma l'ho già realizzata nell'altro modo...

    I vettori sono solo del C++ o anche nel C?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.