15) I Manipolatori

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
JehovaZorobabele
00mercoledì 26 ottobre 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 per
attivare o meno i flags  ecco la lista di questi manipolatori  I e O indica l’ utilizzo se è per cout O o cin I  o
entrambi 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 e
quello visto con l’ attivazione dei flags con il primo sistema le differenze sono descritte evidenziate  tra il giallo
e 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: ";          char
zx; 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 nel
programma 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   per ostream o
istream  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 della
funzione 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 dello
stream  (<<) 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




 



Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 20:43.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com