Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoArsenio Lupi Modificato 10 anni fa
1
Operatori E possibile ridefinire +, -, *, [], ++, ==, < class Vector2D { Friend operator+(const Vector2D& v1, const Vector2D& v2); public: Vector2D(double x, double y); double x() const; double y() const; double r() const; double phi() const; private: double x_; double y_; }; Vector2D operator+(const Vector2D& v1, const Vector2D& v2); Vector2D operator-(const Vector2D& v1, const Vector2D& v2); class Vector2D { Friend operator+(const Vector2D& v1, const Vector2D& v2); public: Vector2D(double x, double y); double x() const; double y() const; double r() const; double phi() const; private: double x_; double y_; }; Vector2D operator+(const Vector2D& v1, const Vector2D& v2); Vector2D operator-(const Vector2D& v1, const Vector2D& v2); Vector2D.h Vector2D operator+(const Vector2D& v1, const Vector2D& v2) { return Vector2D(v1.x + v2.x, v1.y + v2.y); } Vector2D operator-(const Vector2D& v1, const Vector2D& v2) { return Vector2D(v1.x - v2.x, v1.y - v2.y); } Vector2D operator+(const Vector2D& v1, const Vector2D& v2) { return Vector2D(v1.x + v2.x, v1.y + v2.y); } Vector2D operator-(const Vector2D& v1, const Vector2D& v2) { return Vector2D(v1.x - v2.x, v1.y - v2.y); } Vector2D.cpp
2
Operatori (2) E possibile ridefinire anche loutput e linput: cioè gli operatori > class Vector2D { friend operator <<(ostream & os, const Vector2D& v); friend operator >>(istream & is, const Vector2D& v); public: Vector2D(double x, double y); double x() const; double y() const; double r() const; double phi() const; private: double x_; double y_; }; class Vector2D { friend operator <<(ostream & os, const Vector2D& v); friend operator >>(istream & is, const Vector2D& v); public: Vector2D(double x, double y); double x() const; double y() const; double r() const; double phi() const; private: double x_; double y_; }; Vector2D.h Vector2D Vector2d::operator <<(ostream & os, const Vector2D& v) { os<<(<<x<<,<<y<<); return os; } Vector2D Vector2d::operator >>(istream & is, const Vector2D& v) { is>>x; is>>y; return is; } Vector2D Vector2d::operator <<(ostream & os, const Vector2D& v) { os<<(<<x<<,<<y<<); return os; } Vector2D Vector2d::operator >>(istream & is, const Vector2D& v) { is>>x; is>>y; return is; } Vector2D.cpp
3
Operatori (3) Esempio: #include #include Vector2D.h int main() { Vector2D v1(1, 0), v2(0, 1); Vector2D v; v = v1 + v2; cout << v = << v << endl; cout << r = << v.r(); cout << phi = << v.phi() << endl; } #include #include Vector2D.h int main() { Vector2D v1(1, 0), v2(0, 1); Vector2D v; v = v1 + v2; cout << v = << v << endl; cout << r = << v.r(); cout << phi = << v.phi() << endl; } main.cc v = (1, 1) r = 1.4141 theta = 0.7854 Output : ridefinizione di << v.operator=( operator+(v1, v2) ); Sintassi alternativa (!#@!?) :
4
I/O con files E possibile definire altre unità di I/O –Si utilizza la libreria fstream (include iostream ) –I files di input sono dichiarati ifstream –I files di output sono dichiarati ofstream –I files di input/output sono dichiarati fstream –Costruttore con argomento const char* (nome file) //Un file va prima aperto: fstream miofile; miofile.open (dati.txt, ios_base::out); // poi posso scriverci sopra qualcosa miofile<<ciao<<endl; // alla fine lo devo chiudere miofile.close(); Un file puo esssere aperto: ios_base::out // in scritttura ios_base::in // in lettura ios_base::app // in append (scrive alla fine del file)
5
I/O con files Posso posizionarmi in un punto qualsiasi del file prima di leggere o scrivere con le istruzioni: miofile.seekg (5) si posiziona nella posizione 5 del file per leggere miofile.seekp (8) si posiziona nella posizione 8 del file per scrivere. miofile.eof() // restituisce true se sono arrivato alla fine del file miofile.fail() // restituisce true se ho fallito ad aprire il file (il file non esiste o il disco è protetto in scrittura)
6
Appendice: Manipolatori di I/O Modificano il comportamento di una stream. boolalpha : true e false rappresentati come stringhe noboolalpha : true e false rappresentati come 1 e 0 (default) showbase : interi stampati col prefisso che indica la base noshowbase : interi stampati senza il prefisso (default) showpoint : floating point stampati sempre col punto decimale noshowpoint : stampa i floating point come interi se non frazionari (default) showpos : stampa + per numeri positivi noshowpos : non stampa + per i numeri positivi (default) skipws: salta gli spazi bianchi in input (default) noskipws : non salta gli spazi bianchi in input uppercase : stampa 0X in esadecimale, E in scientifica lowercase : stampa 0x oppure e (default) dec : interi in base 10 (default) hex : interi in base 16 oct: interi in base 8
7
Appendice: Manipolatori di I/O (2) I seguenti manipolatori richiedono: #include left : aggiunge caratteri di riempimento alla destra del val. right : aggiunge caratteri di riempimento alla sinistra internal : aggiunge caratteri fra segno e valore fixed : floating point in notazione decimale (default) scientific : floating point in notazione scientifica flush : svuota il buffer ends : aggiunge il carattere nullo ( \0 ) e svuota il buffer endl : aggiunge un newline e svuota il buffer ws : mangia gli spazi bianchi setfill(ch) : definisce il carattere di riempimento setprecision(n) : definisce la precisione per i floating point setw(n) : scrive o legge in n caratteri setbase(b) : interi in base b
8
Esempio di I/O con manipolatori #include int main() { cout << "inserisci un numero: "; double num=0; while(cin >> num) { int pi = (int)(num); cout << setfill('0') << setprecision(5); cout << "Il numero inserito e\' " << num << endl; cout << "La parte intera e\' " << pi << "(" << hex << setw(6) << pi << " esadecimale)" << dec << endl; cout << "La parte frazionaria e\' " << num-pi << endl; cout << "inserisci un numero: "; } return 0; } inserisci un numero: 12345.678 Il numero inserito e' 12346 La parte intera e' 12345(003039 esadecimale) La parte frazionaria e' 0.678 inserisci un numero:
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.