Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione
realme C100x scommette tutto, forse troppo, sulla batteria da 7500 mAh e sulla certificazione ArmorShell per farsi notare nella fascia più economica del mercato: lo abbiamo messo alla prova per capire a chi è rivolto questo smartphone che sacrifica un po' prestazioni, display e fotocamera per offrire l'autonomia migliore possibile a un prezzo decisamente contenuto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-05-2007, 16:27   #1
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
[c++] Utilizzo new con Class, dubbi.

ciao a tutti, sono qui per esporvi un dubbio che mi sta bloccando.

Ho appena "concluso" lo studio delle proprietà e le modalità di uso della OOP. Tutto contento ho provato a fare un esercizio serio..e mi sono inchiodato praticamente all'istante.

Ecco il dubbio (tranquilli non riporto l'esercizio!).

Se io creo nuovi oggetti Class con "new"...

poi come faccio a ritrovarli?

Esempio banale:

Codice:
while (condizione) {
Classe *puntatore = new Classe;
...qui lavoro sulla mia classe inserendo quello che mi pare...
}
in questa procedura continua a creare oggetti classe con un puntatore (che è sempre lo stesso per tutte..e già qui non va bene) e tutte le classi eccetto l'ultima creata (ovviamente..starete pensando) si perdono nel vuoto.

Come si fa a realizzare il tutto in modo sobrio? Davvero, non riesco ad arrivarci. Pensavo servissero gli iteratori per questa cosa..ma oltre alle stack, list, queue e set, non so come usarli!

Grazie a chi mi aiuterà.
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre

Ultima modifica di D3stroyer : 26-05-2007 alle 16:29.
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2007, 18:15   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
ehmmm..
ma così vedi che stai creando sempre una sola instanza di Classe che poi alla fine del ciclo scompare.
Per mantenere TUTTI gli oggetti anche alla fine del ciclo dovresti aggiungere questi oggetti ad un array o ad una lista dichiarati all'esterno del ciclo.
Ti consiglio di capire per bene il concetto di visibilità delle variabili e di località
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2007, 19:05   #3
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
non c'è qualche guida che mi mostri come ci si muove in un programma decente ad oggetti?

non libri perchè in quelli che ho letto si parla tanto, ma non si mostra nulla!

comunque hai ragione, ho detto una vera cazzata ma se mi scriveste qualche esempio ve ne sarei grato (esempio dove il programma deve crearsi nuovi oggetti classe e deve tenerseli in memoria).
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre

Ultima modifica di D3stroyer : 26-05-2007 alle 19:08.
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2007, 11:06   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da D3stroyer Guarda i messaggi
non c'è qualche guida che mi mostri come ci si muove in un programma decente ad oggetti?

non libri perchè in quelli che ho letto si parla tanto, ma non si mostra nulla!

comunque hai ragione, ho detto una vera cazzata ma se mi scriveste qualche esempio ve ne sarei grato (esempio dove il programma deve crearsi nuovi oggetti classe e deve tenerseli in memoria).
Dalle 3 righe di codice postate non si capisce cosa tu voglia fare esattamente, ma se devi usare le varie istanze di Classe anche fuori dallo while potresti fare qualcosa tipo:
Codice:
vector<Classe*> vClassi;

while (condizione) {
Classe *puntatore = new Classe;
...qui lavoro sulla mia classe inserendo quello che mi pare...
vClassi.push_back(puntatore);
}

//Alla fine di tutto, per dellocare:
vector<Classe*>::iterator it;
for (it = vClassi.begin(); it != vClassi.end(); it++)
{
    delete (*it);
}
vClassi.clear();

Ultima modifica di tomminno : 27-05-2007 alle 11:11.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2007, 12:09   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Prova a lanciarti in un esercizio che abbia un senso. Perchè alla fine la ragione del new è tutta qui. Una volta ad un corso diedi questo. Sei al supermercato col tuo bel carrello di schifezze. Arrivi alla cassa allo scopo di perfezionare l'acquisto delle merci. Descrivi il fenomeno "acquisto delle merci nel carrello in un supermercato" e poi rappresentalo nei termini usati per la descrizione. L'unica cosa che potrebbe apparire aliena, ma non lo è una volta che si conosca, è la necessità di definire un contesto. Che, tra l'altro, risponde alle domande "ma come faccio ad accedere agli oggetti che creo" e, soprattutto, "ma perchè diavolo dovrei aver bisogno di sapere quali oggetti ho creato".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2007, 21:31   #6
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
Quote:
Originariamente inviato da tomminno Guarda i messaggi
cut
wow, questo mi suona familiare anche se non so usare le vector (me le studio subito ). Grazie, l'esempio sembra azzeccatissimo.

@PGI: domani provo a rileggere attentamente perchè attualmente mi sono arrotolato tra le righe e non ci ho capito nulla

grazie a tutti per ora
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 20:13   #7
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
allora..non riesco a far funzionare il metodo di tommino.

vorrei fare una cosa simile..

Codice:
#include <iostream>
#include <vector>

using namespace std;

class classe {
      public:
      classe() {};
      ~classe() {};
      int numero;
      };
      
vector<classe*> vClassi;


int main( ) {
    int i = 0;
    while (i < 5) {
    classe *puntatore = new classe;
    cin >> puntatore->cane;
    vClassi.push_back(puntatore);
    i++;
    }
    
   vector<classe*>::iterator it;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   cout << Qui cosa scrivo se voglio in cout il numero dentro ad ogni classe? << endl;
   }
    

}
illuminatemi plz...tutti i miei problemi sono nel non sapere come fare questo!
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 20:38   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da D3stroyer Guarda i messaggi
allora..non riesco a far funzionare il metodo di tommino.

vorrei fare una cosa simile..

Codice:
#include <iostream>
#include <vector>

using namespace std;

class classe {
      public:
      classe() {};
      ~classe() {};
      int numero;
      };
      
vector<classe*> vClassi;


int main( ) {
    int i = 0;
    while (i < 5) {
    classe *puntatore = new classe;
    cin >> puntatore->cane;
    vClassi.push_back(puntatore);
    i++;
    }
    
   vector<classe*>::iterator it;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   cout << Qui cosa scrivo se voglio in cout il numero dentro ad ogni classe? << endl;
   }
    

}
illuminatemi plz...tutti i miei problemi sono nel non sapere come fare questo!
Intanto:
Codice:
cin >> puntatore->cane;
cane non è un membro di Classe.

poi gli iteratori sono puntatori, quindi it è un puntatore a un puntatore a Classe, a te cercare la soluzione.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 21:12   #9
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
davvero, non ci arrivo, ho provato anche a fare il disegnino dello schema che si crea ma in quel cout non riesco a non farmi dare errori!

non badare a cane, era un errore di copiaincolla. Era numero invece di cane.

Ragionando ho questa idea:

vClassi è un contenitore di puntatori a classe quindi contiene gli indirizzi dei puntatori che puntano alle classi stesse...ossia gli indirizzi a "puntatore" (come l'ho chiamato nel programma).

Quindi in teoria dovrei entrare in it->puntatore->numero; ma nemmeno così funziona..quindi c'è un problema mio di incomprensione e non capisco qual'è!



edit!!!

forse inizio a capire..ma ancora non va

Codice:
#include <iostream>
#include <vector>

using namespace std;

class classe {
      public:
      classe() {};
      ~classe() {};
      int numero;
      };
      
vector<classe*> vClassi;


int main( ) {
    int i = 0;
    while (i < 5) {
    classe *puntatore = new classe;
    cin >> puntatore->numero;
    vClassi.push_back(puntatore);
    i++;
    
    
    }
    
   vector<classe*>::iterator it;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   classe* ptr = vClassi.front();
   cout << ptr->numero << endl;
   }
    

}

in input do 1, 2, 3, 4, 5...ma in cout continua a darmi 1!...perchè?
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre

Ultima modifica di D3stroyer : 30-05-2007 alle 21:22.
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 21:29   #10
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
ok, sono riuscito, ma è un metodo veramente brutto e deve esserci un modo elegante di fare la stessa cosa...ditemelo se c'è, per favore!

incollo solo la parte finale che ho usato per risolvere.

Codice:
int main( ) {
    int i = 0;
    while (i < 5) {
    classe *puntatore = new classe;
    cin >> puntatore->numero;
    vClassi.push_back(puntatore);
    i++;
    
    
    }
    
   vector<classe*>::iterator it;
   int g = 0;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   cout << vClassi.at(g)->numero << endl;
   g++;
   }
    

}
ho dovuto inizializzare fuori dal for un int g per fare muovere l'iteratore tra i puntatori di classe. Sicuramente non è un metodo apprezzato da voi che ne sapete sicuramente altri! help, poi sparisco davvero

comunque grazie, fin'ora mi avete aiutato bene.
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 23:20   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da D3stroyer Guarda i messaggi
vClassi è un contenitore di puntatori a classe quindi contiene gli indirizzi dei puntatori che puntano alle classi stesse...ossia gli indirizzi a "puntatore" (come l'ho chiamato nel programma).

Quindi in teoria dovrei entrare in it->puntatore->numero; ma nemmeno così funziona..quindi c'è un problema mio di incomprensione e non capisco qual'è!
Ehm qui urge un ripassino sulla teoria.
"puntatore" è solo un nome di variabile il cui scope è il primo while, "puntatore" contiene un indirizzo di memoria che viene copiato sul vettore tramite il metodo push_back, fuori dallo while per riferirti a quel particolare indirizzo d memoria devi ricorrere all'elemento del vettore non più a "puntatore" che in quanto variabile è già stata distrutta all'uscita dello while.

Quote:
Codice:
#include <iostream>
#include <vector>

using namespace std;

class classe {
      public:
      classe() {};
      ~classe() {};
      int numero;
      };
      
vector<classe*> vClassi;


int main( ) {
    int i = 0;
    while (i < 5) {
    classe *puntatore = new classe;
    cin >> puntatore->numero;
    vClassi.push_back(puntatore);
    i++;
    
    
    }
    
   vector<classe*>::iterator it;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   classe* ptr = vClassi.front();
   cout << ptr->numero << endl;
   }
    

}

in input do 1, 2, 3, 4, 5...ma in cout continua a darmi 1!...perchè?
il metodo front restituisce il primo elemento è chiaro che ritorna sempre 1, visto che non chiami il metodo erase per eliminare un elemento dal vettore!
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 23:20   #12
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da D3stroyer Guarda i messaggi
Codice:
   vector<classe*>::iterator it;
   int g = 0;
   for (it = vClassi.begin(); it != vClassi.end(); it++) {
   cout << vClassi.at(g)->numero << endl;
   g++;
   }
    

}
ho dovuto inizializzare fuori dal for un int g per fare muovere l'iteratore tra i puntatori di classe. Sicuramente non è un metodo apprezzato da voi che ne sapete sicuramente altri! help, poi sparisco davvero

comunque grazie, fin'ora mi avete aiutato bene.
Infatti ma che li inserisci a fare gli iteratori se poi non li usi?
La soluzione è banale, prova con:
Codice:
cout << (*it)->numero << endl;
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2007, 23:28   #13
D3stroyer
Senior Member
 
L'Avatar di D3stroyer
 
Iscritto dal: Dec 2003
Messaggi: 3567
MWAHAHAHAHAHAH, finalmente..tutto è chiaro.

Perfetto. Avevo un'idea degli iteratori completamente sbagliata e non avevo evidentemente ben inquadrato il concetto di contenitore. Ottimo, sono apposto, mi hai risolto un problema chiave (ho anche scritto tante fesserie però).

grazie davvero.

edit: si, ora ho tutti i mezzi, vi ringrazio siete stati mitici, soprattutto tomminno. ho risolto il tema d'esame che non potevo fare prima!
__________________
Intel Core 2 Duo E6300 @ 3.00GHz / Gigabyte P965 DS4 / 2xTEAM GROUP TVDD1024M800 / Gainward GTX460 GS 1GB
Barracuda 7200.11 SataII 500Gb + Maxtor ATA320Gb + Hitachi SataII 320Gb / Enermax Noisetaker 495W
Il miglior topic di sempre

Ultima modifica di D3stroyer : 31-05-2007 alle 11:11.
D3stroyer è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Tamoil taglia il prezzo dei carburanti p...
Gears of War: E-Day mostra i vantaggi de...
Halo Combat Evolved ora gira nel browser...
Auto cinesi alla conquista del mondo, ma...
Cynet 5.0 unifica la gestione dei siti e...
Samsung alza i prezzi: fino a 200 euro i...
POCO annuncia l'arrivo in Italia dei nuo...
Moonshot AI (Kimi) ruba le risposte di G...
GPT-Synopsys, OpenAI vuole trasformare l...
NetApp porta l'IA nella console e ONTAP ...
Saturno all'opposizione e Giove dietro l...
TSMC non si ferma: dopo l'Arizona potreb...
Caso Revolut, Piantedosi alla Camera: 'L...
La Space Force statunitense e le armi sp...
Fa tutto l'IA: scoperte scientifiche con...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v