ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διαφάνειες παρουσίασης #4 4 Κατασκευαστές (constructors) 4 Καταστροφείς (destructors) 4 Δείκτης this 4 Διάφοροι τελεστές
2Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές (constructors)(i) u Μιγαδικοί αριθμοί class complex { //... public: complex (); complex (double r, double i); complex (const complex & c); }; complex c1; complex c2(1.0, 4.0); complex c3(c1);
3Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές (constructors)(ii) u Default constructor complex::complex () { re = im = 0.0; } u Copy constructor complex::complex (const complex & c) { re = c.re; im = c.im; }
4Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές (constructors)(iii) u Λοιποί constructors complex::complex (double r, double i) { re = r; im = i; } complex::complex (double r) { re = r; im = 0.0; }
5Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Καταστροφείς (destructors)(i) u Καλούνται όταν ένα αντικείμενο καταστρέφεται, δηλαδή παύει να υπάρχει: { name n; //... } u Πολλές φορές απαραίτητοι για λειτουργίες εκκαθάρισης, π.χ. l αποδέσμευση μνήμης l κλείσιμο αρχείων
6Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Καταστροφείς (destructors)(ii) class name { private: char * s; public: name (const char * n); ~name (); }; name::name (const char * n) { cout << n << " is copied\n"; s = new char [strlen(n)+1]; strcpy(s, n); }
7Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Καταστροφείς (destructors)(iii) name::~name () { cout << s << " is deleted\n"; delete [] s; } int main () { name n("nickie"); return 0; } nickie is copied nickie is deleted nickie is copied nickie is deleted
8Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Δείκτης this u Δείχνει στο αντικείμενο επάνω στο οποίο εφαρμόζεται μια μέθοδος u Η χρήση του απαιτείται σπάνια u Παράδειγμα void complex::set (double r, double i) { this->re = r; // re = r; this->im = i; // im = i; } l Η χρήση του this στο παραπάνω παράδειγμα είναι περιττή
9Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διάφοροι τελεστές(i) u operator = complex & complex::operator = ( const complex & c) { re = c.re; im = c.im; return *this; } name & name::operator = ( const name & n) { delete [] s; s = new char [strlen(n.s)+1]; strcpy(s, n.s); return *this; }
10Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διάφοροι τελεστές(ii) u operator [] char & name::operator [] (int i) { return s[i]; } u operator () char name::operator () (int i) { return s[i]; } u Παραδείγματα n[4] = 'a'; cout << n(4);