| | | OFFLINE | | Post: 257 Post: 246 | Registrato il: 02/03/2016 Registrato il: 03/03/2016 | Sesso: Maschile | |
|
26/10/2016 18:27 | |
Ora parliamo dei manipolatori sono altre funzioni, queste serve per formattare in un’ altro modo lo stream di I/O molti manipolatori sono uguali alle funzioni che abbiamo visto prima, essendo anche loro specifici perattivare o meno i flags ecco la lista di questi manipolatori I e O indica l’ utilizzo se è per cout O o cin I oentrambi IO per utilizzare questi manipolatori serve inserire #include<iomanip> :
boolalpha - nobooalpha per IO attiva disattiva il flag true e false , dec hex oct per IO attiva il flag decimale o esadecimale o ottale, endl per O carattere di fine riga e svuota lo stream, ends per O un carattere nullo, fixed scientific per O attiva la modalità standard dei numeri o scientifici , flush O svuotamento dello stream , internal left right O attiva il flag internal, left , right, dove left e right inserisce caratteri di riempimento left riempie la sinistra , right riempie la destra e internal riempie il centro del campo noshobase - shobase O inserisce i prefissi per i numeri ad esempio se si utilizza un numero esadecimale prima del numero inserisce 0x la base esadecimale , noshowpoit - showpoint O inserisce in modo non condizionale un punto decimale in un campo a virgola mobile ovvero tratta i numeri in diversi modi 1 quintale è 100 chili ma è anche 0.1 tonnellate , sono anche 1000 ettogrammi , noshowpos - showpos O inserisce in un campo positivo il segno +, noskipws - skippws O elimina i spazi vuoti iniziali , se skipws() è uguale a 0 i spazi vuoti non vengono eliminati , nouppercase - uppercase O cambia le scritte minuscolo in maiuscolo n uppercase N, setiosflags - resetioflags(f) IO avvia o azzera i flags specificati in ( f ), setbase () O imposta la base numerica se i numeri sono dec, hex o oct, setfill() O imposta il carattere di riempimento , setprecisi0n() O imposta il numero di cifre di precisione per i valori in virgola mobile , setw() O imposta l’ ampiezza del campo , unitbuf O scarica l’ output dopo ogni inserimento, ws I salta i spazi vuoti iniziali Ora vediamo l’ utilizzo di queste funzioni preparo un programma uguale scritto con il sistema visto qui equello visto con l’ attivazione dei flags con il primo sistema le differenze sono descritte evidenziate tra il gialloe il verde si vede che con l’ utilizzo dei manipolatori si ha un codice più compatto con un solo stream posso inserire più ordini al compilatori se qualcuno utilizza questo programma deve inserire include e using un comando per riga il resto può rimanere tutto su una riga il compilatore non ha problemi :#include<iostream> #include<iomanip>using namespace std; int main () { cout << " attivazione dei flag nuovo stile : \n\n"; cout << " scrivo il numero 125 in esadecimale: " << hex << 125 <<endl; cout << "\n\n scrivo il numero 12345.123 numero anticipato da setfill('x')\n abilitiamo 10 spazi vuoti da setw(10): \n\n "; cout << setfill ('x') << setw (10) << 12345.123; cout << "\n\n Stesso lavoro ma attivo i flag nell'altro modo con ios:: -:\n\n"; cout << " scrivo il numero 125 in esadecimale: " ; cout.setf (ios::hex,ios::basefield); cout << 125 << endl; cout << "\n\n scrivo il numero 12345.123 numero anticipato da setfill('x')\n abilitiamo 10 spazi vuoti da setw(10): \n\n "; cout.fill ('x'); cout.width (10); cout << 12345.123; cout << "\n\n\nByMpt-Zorobabele \n Per uscire premere un tasto + invio: "; charzx; cin >> zx; }Il manipolatore setiosflags() , resetioflags() attiva o meno i manipolatori , setiosflag() effettua la stessa azione della funzione setf() , mentre il manipolatore boolalpha invece di portare un numero diverso da 0 =positivo,o uguale a 0 = negativo invece il manipolatore usa il true e il false vediamo l’ uso di questi 2 manipolatori per usare setiosflags ricordiamo di inserire l’ inclusione di <iomanip> inserire questo pezzo di programma nelprogramma scritto prima inserirlo al di sopra della chiusura ecco il listato da copiare : cout << setiosflags (ios::showpos | ios::showbase); cout <<" decimale = "<< 12345 << "\n esadecimale = " << hex << 12345 <<"\n octale = "<<oct<<12345; cout << " \n\n uso di boolalpha ... \n\n "; bool b = true; cout << b << " <- prima di boolalpha.. \n dopo di boolalpha -> " << boolalpha << b << endl; cout << "\n inserire un valore booleano [true/false]: "; cin >> boolalpha >> b; if(b == true) cout << "\n questo e' il valore immesso: " << b << " = 1\n "; else cout << "\n questo e' il valore immesso: " << b << " = 0\n ";Abbiamo detto che lo stream è la funzione di chiamata cout << o cin>> proprio questi operatori (<< inseritore) e (>> estrattore) , questi operatori possiamo utilizzarli per leggere i dati tramite l’ overloading, per creare una funzione per l’ inseritore o l’ estrattore si cambia solo la parola ostream in istream e invece di usare << si usa >> nome_classe è il nome della classe che usiamo oggetto è l’ oggetto per accedere i membri della classe ( o.x ) in input questo oggetto va richiamato per la lettura della memoria con &o pertanto avremo nome_classe &oggetto vediamo la sua sintassi è dove usiamo o o i per ostream oistream dentro la funzione se si usa ostream si usa l’ inseritore stream << mentre se si usa l’ estrattore istream si usa stream>> importantissimo la raccolta dei dati il return stream restituisce tutti i dati dellafunzione della classe i/ostream normalmente questa funzione viene inserita al di fuori della classe tutti i membri della classe devono essere pubblici, oppure viene dichiarata friend in modo che può accedere i membri della classe cosi il prototipo della funzione può essere inserita dentro la classe ecco i 2 tipi di funzione per ostream e per istream mentre il corpo della funzione è uguale cambia solo l’ uso dellostream (<<) o ( >>) : friend ostream &operator<<(ostream &stream, nome_classe oggetto ) friend istream &operator<<(istream &stream, nome_classe &oggetto ) { corpo della funzione inseritore stream << (come cout) o estrattore stream >>(come cin) return stream ;}Effettivamente questa nuova funzione essendo un overloading degli operatori o<< i>> non possono essere membri della classe su cui lavora nome_classe oggetto , ma se viene dichiarata friend amica allora deve essere inserita dentro la stessa classe Ciao grazie da ByMpt-Zorobabele Testo PDF aggiornato con questo ultimo capitolo inserito lo trovate :http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx Anche qui di queste discussioni che inserisco faccio un testo PDF da poter scaricare tutto il mio materiale è da utilizzare come desiderate per il testo PDF vedi cartella dedicata , ogni volta cambia ubicazione del testo allora cambio il file e il testo lo inserisco dentro la cartella < file aggiornato ad oggi > http://www.freeforumzone.com/d/11266858/Elenco-figure-dei-comandi-della-programmazione-C-TESTO-PDF/discussione.aspx [Modificato da JehovaZorobabele 27/10/2016 23:58] |