ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

Σχετικά έγγραφα
Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

17TimeThis.h function returns reference pointer to same object { return *this; }

Προγραμματισμός Υπολογιστών με C++

Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Κλάσεις και αντικείμενα #include <iostream.h<

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Οντοκεντρικός Προγραμματισμός

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Προγραμματισμός Υπολογιστών με C++

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Υπολογιστών με C++

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Υπολογιστών με C++

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Υπερφόρτωση τελεστών (operator(

Υπερφόρτωση τελεστών

Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Προγραμματισμός Υπολογιστών με C++

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

4 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ

Βασικά της γλώσσας JAVA

Προγραμματισμός Υπολογιστών με C++

ΜΑΘΗΜΑ: Αντικειμενοστρεφής Προγραμματισμός

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

3 Αλληλεπίδραση Αντικειμένων

Ειδικά Θέματα Ι. Σήμερα!

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Προγραμματισμός Υπολογιστών με C++

Στοιχειώδης προγραμματισμός σε C++

Αναφορές, είκτες και Αλφαριθμητικά

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Εισαγωγή στον Προγραμματισμό με C++

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Συναρτήσεις και Πίνακες

5. ΣΥΝΑΡΤΗΣΕΙΣ. (Πρόχειρο σχέδιο - Μαθήµατος 3) p Συναρτήσεις, που δεν επιστρέφουν κάποια τιµή

Πληροφορική 2. Γλώσσες Προγραμματισμού

Κλάσεις και Αντικείµενα

Δυναμική μνήμη με πίνακες και λίστες

Προγραμματισμός Υπολογιστών με C++

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Προχωρημένα Θέματα ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ. Γεώργιος Παπαϊωάννου ( )

Προγραμματισμός Υπολογιστών με C++

Εισαγωγή στην πληροφορική

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Ελένη Τουσίδου, Ph.D.

ΗΓλώσσαΠρογραµµατισµού C++ (The C++ Programming Language)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΠΟΛΥΜΟΡΦΙΣΜΟΣ

Προγραμματισμός Υπολογιστών με C++

Πίνακες (Arrays) Εισαγωγή στη C++

02 Αντικειμενοστρεφής Προγραμματισμός

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

10. ΥΠΕΡΦΟΡΤΩΣΗ ΤΕΛΕΣΤΩΝ (OPERATOR OVERLOADING)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Χωρική Βάση δεδοµένων Autocad

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΗΥ-150. Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Οντοκεντρικός Προγραμματισμός

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

Διανύσματα στις 3 Διαστάσεις

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Transcript:

ΠΑΡΑ ΕΙΓΜΑ δυναµικής δέσµευσης και αποδέσµευσης µνήµης στη C++ µέσω των new και delete. // create.cpp #include <iostream> using namespace std; class values public: values() : value1(0), value2(0) count++; cout << "default constructing object " << count << endl; ~values() cout << "destructing! object " << count << endl; count--; void setvalues(int i, int j) value1 = i; value2 = j; long getvalue1() const return value1; long getvalue2() const return value2; private: long value1; long value2; static int count; ; int values::count = 0; const int MAX_ELEMENTS = 20; ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος 2006-2007 int main() int *intarray; intarray = new int[ MAX_ELEMENTS ]; int i = 0; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -1-

for(i = 0; i < MAX_ELEMENTS; i++ ) intarray[i] = i; int *int_ptr = new int; *int_ptr = 1000; cout << "int_ptr = " << *int_ptr << endl; delete int_ptr; for(i = 0; i < MAX_ELEMENTS; i++ ) cout << "intarray[i] = " << intarray[i] << endl; delete [] intarray; values *sarray = new values[ MAX_ELEMENTS ]; for(i = 0; i < MAX_ELEMENTS; i++ ) sarray[i].setvalues(i, i * 10); for(i = 0; i < MAX_ELEMENTS; i++ ) cout << "sarray[i].value1 = " << sarray[i].getvalue1(); cout << ", sarray[i].value2 = " << sarray[i].getvalue2() << endl; delete [] sarray; return( 0 ); Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -2-

Yπερφόρτωσης τελεστών Παράδειγµα A) // point.c #include <cmath> #include <iostream> using namespace std; class Point public: // constructors Point() : x(0), y(0) // προκαθορισµένος δοµητής Point(double x1) x = x1; y = 0; // δοµητής µε ένα όρισµα Point(double x1, double y1) move(x1, y1); Point(const Point & pt); // δοµητής αντιγραφέας // overloaded operators bool operator==(const Point &p1); Point& operator=(const Point &p1); Point operator*(double n) const; Point operator-(); // data accessors double getx() const return x; double gety() const return y; // data mutators void setx(double x1) x = x1; void sety(double y1) y = y1; void move(double x1, double y1) x = x1; y = y1; // computation and print functions void print() const cout << "(" << x << "," << y << ")"; double distance() const; inline static Point origin(); private: double x, y; ; bool Point::operator==(const Point &p1) return ((getx() == p1.getx()) && (gety() == p1.gety())); Point& Point::operator=(const Point &p1) // Τελεστής ανάθεσης τιµής! Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -3-

if (this!= &p1) x = p1.x; y = p1.y; return *this; // Πολ/σµός των συντεταγµένων µε n Point Point::operator*(double n) const return Point(x*n,y*n); Point Point::operator-() // Μοναδιαίος τελεστής! return Point(-x,-y); double Point::distance() const return sqrt(getx() * getx() + gety() * gety()); inline Point Point::origin() return Point(); Point::Point(const Point & pt) : x(pt.x), y(pt.y) // Κενό σώµα! int main() double n; Point p(20, 43); Point q; // αρχικοποίηση q σε (0,0) Point r(20); Point s(p); // αρχικοποίηση µε το p. cout << "p: " << p.getx() << ' ' << p.gety() << endl; q.move(30, 30); // move q cout << "q: " << q.getx() << ' ' << q.gety() << endl; q = p; // ανάθεση τιµής! cout << "q: " << q.getx() << ' ' << q.gety() << endl; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -4-

if (q==p) cout << "Points q and p match!\n"; p= p*2; p=-p; cout << "-p: " << p.getx() << ' ' << p.gety() << endl; s.print(); // εκτύπωση µέσω κλήσης συνάρτησης µέλους cin >> n; s.setx(n); cin >> n; s.sety(n); if (s == (Point::origin())) cout << "s is Origin\n"; else cout << "Distance of s = " << s.distance() << endl; return 0; ΑΣΚΗΣΕΙΣ Υπερφορτώστε τους δυαδικούς τελεστές: +, -, +=, - = ώστε να µπορούµε να έχουµε p1+p2, p1-p2, p1+=p2, p1 - = p2. Μπορείτε να υπερφορτώσετε τον τελεστή << ώστε να µπορούµε µέσω αυτού να τυπώσουµε απ ευθείας ένα σηµείο; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -5-

ΠΑΡΑ ΕΙΓΜΑ Β) ίνετατι η παρακάτω τάξη που ορίζει ένα ρολόϊ που µετρά από 00:00:00 έως 23:59:59. Να συµπληρωθεί το παρακάτω πρόγραµµα µε τις αναγκαίες συναρτήσεις ώστε να δουλεύει. #include <iostream> using namespace std; class mytime public: void display() const //format: 23:15:01 ; if(hours < 10) cout << '0'; cout << hours << ':'; if(minutes < 10) cout << '0'; cout << minutes << ':'; if(seconds < 10) cout << '0'; cout << seconds; private: int hours; //0 to 23 int minutes; //0 to 59 int seconds; //0 to 59 int main() mytime t1(5,30,0); cout << "t1 : "; t1.display(); mytime t2(t1); cout << "t2(t1) : "; t2.display(); t1++; --t2; cout << "t1++ : "; t1.display(); cout << "--t2 : "; t2.display(); mytime t3 = t2 + t1*3; cout << "t3 = t2 + t1*3 : "; t3.display(); t1 = t3 - t1; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -6-

cout << "t1 = t3 - t1 : "; t1.display(); return 0; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -7-

ΑΠΑΝΤΗΣΕΙΣ στην υπερφόρτωση συναρτήσεων ΠΑΡΑ ΕΙΓΜΑ Α) // point.c - private data members #include <cmath> #include <iostream> using namespace std; class Point public: typedef double value_type; // constructors Point() : x(0), y(0) // προκαθορισµένος δοµητής Point(double x1) x = x1; y = 0; // δοµητής µε ένα όρισµα Point(double x1, double y1) move(x1, y1); Point(const Point & pt); // δοµητής αντιγραφέας // overloaded operators bool operator==(const Point &p1); Point& operator=(const Point &p1); Point operator*(double n) const; Point operator-(); Point operator+(const Point &p1) const; Point operator-(const Point &p1) const; Point& operator+=(const Point &p1); Point& operator-=(const Point &p1); //ostream& operator << ( ostream&); // Αν ο τελεστής << είναι µέλος της τάξης friend ostream& operator<<(ostream&, const Point&); // data accessors double getx() const return x; double gety() const return y; // data mutators void setx(value_type x1) x = x1; void sety(value_type y1) y = y1; void move(value_type x1, value_type y1) x = x1; y = y1; // computation and print functions void print() const cout << "(" << x << "," << y << ")"; value_type distance() const; inline static Point origin(); private: value_type x, y; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -8-

; bool Point::operator==(const Point &p1) return ((getx() == p1.getx()) && (gety() == p1.gety())); Point& Point::operator=(const Point &p1) // Τελεστής ανάθεσης τιµής! if (this!= &p1) x = p1.x; y = p1.y; return *this; // Πολ/σµός των συντεταγµένων µε n Point Point::operator*(double n) const return Point(x*n,y*n); Point Point::operator-() // Μοναδιαίος τελεστής! return Point(-x,-y); ////////////////////////////////////////////////// Point Point::operator+(const Point &p1) const return Point(x+p1.x, y+p1.y); Point Point::operator-(const Point &p1) const return Point(x-p1.x, y-p1.y); Point& Point::operator+=(const Point &p1) x+=p1.x; y+=p1.y; return *this; Point& Point::operator-=(const Point &p1) x-=p1.x; y-=p1.y; return *this; ostream& operator<<(ostream& os, const Point& pt) Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -9-

os << "(" << pt.x << "," << pt.y << ")" << endl; return os; /* ο τελεστής << ως συνάρτηση µέλος της τάξης! ostream& Point::operator<< ( ostream& os ) os << "(" << x << "," << y << ")" << endl; return os; */ ////////////////////////////////////////////////// Point::value_type Point::distance() const return sqrt(getx() * getx() + gety() * gety()); inline Point Point::origin() return Point(); Point::Point(const Point & pt) : x(pt.x), y(pt.y) // Κενό σώµα! int main() Point::value_type n; Point p(20, 43); Point q; // αρχικοποίηση q σε (0,0) Point r(20); Point s(p); // αρχικοποίηση µε το p. cout << "p: " << p.getx() << ' ' << p.gety() << endl; q.move(30, 30); // move q cout << "q: " << q.getx() << ' ' << q.gety() << endl; q = p; // ανάθεση τιµής! cout << "q: " << q.getx() << ' ' << q.gety() << endl; if (q==p) cout << "Points q and p match!\n"; p= p*2; p=-p; cout << "-p: " << p.getx() << ' ' << p.gety() << endl; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -10-

s.print(); // εκτύπωση µέσω κλήσης συνάρτησης µέλους p = q+r; cout << "p = q + r = " << p.getx() << ' ' << p.gety() << endl; r += p; cout << "r += p : " << r.getx() << ' ' << r.gety() << endl; p -= r; cout << "p -= r : " << p.getx() << ' ' << p.gety() << endl; r = r-p; cout << "r = r - p = " << r.getx() << ' ' << r.gety() << endl; cout << "p=" << p << "q=" << q << "r=" << r; // Αν ο τελεστής << είναι µέλος της τάξης Point τότε ισχύουν τα παρακάτω: //cout << "p="; p << cout; cout << "q="; q << cout; cout << "r="; r << cout; cin >> n; s.setx(n); cin >> n; s.sety(n); if (s == (Point::origin())) cout << "s is Origin\n"; else cout << "Distance of s = " << s.distance() << endl; return 0; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -11-

ΠΑΡΑ ΕΙΓΜΑ Β) // Προσοχή δε γίνεται έλεγχος για εισαγωγή έγκυρων τιµών!. #include <iostream> using namespace std; class mytime public: // constructors mytime() : hours(0), minutes(0), seconds(0) mytime(int h, int m, int s) : //3-arg constructor hours(h), minutes(m), seconds(s) mytime(const mytime&); // copy constructor // overloaded operators mytime operator+(const mytime& t1) const; mytime operator-(const mytime& t1) const; mytime operator++(int); const mytime& operator--(); mytime operator*(int n); ; void display() const //format: 23:15:01 if(hours < 10) cout << '0'; cout << hours << ':'; if(minutes < 10) cout << '0'; cout << minutes << ':'; if(seconds < 10) cout << '0'; cout << seconds << endl; private: int hours; //0 to 23 int minutes; //0 to 59 int seconds; //0 to 59 mytime::mytime(const mytime& t1) : hours(t1.hours), minutes(t1.minutes), seconds(t1.seconds) mytime mytime::operator +(const mytime& t1) const int tim = (hours+t1.hours)*3600 + (minutes+t1.minutes)*60 + seconds + t1.seconds; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -12-

mytime temp; temp.hours = tim / 3600; tim %=3600; temp.minutes = tim / 60; temp.seconds = tim % 60; return temp; mytime mytime::operator -(const mytime& t1) const int tim = (hours-t1.hours)*3600 + (minutes-t1.minutes)*60 + seconds - t1.seconds; if (tim < 0) return mytime(0,0,0); mytime temp; temp.hours = tim / 3600; tim %=3600; temp.minutes = tim / 60; temp.seconds = tim % 60; return temp; mytime mytime::operator ++(int) // post-increment mytime temp=*this; int tim = hours*3600 + minutes*60 + seconds; tim++; hours = tim / 3600; tim %= 3600; minutes = tim / 60; tim %= 60; seconds = tim; return temp; const mytime& mytime::operator --() // pre-increment int tim = hours*3600 + minutes*60 + seconds; tim--; if (tim <0) tim=0; hours = tim / 3600; tim %= 3600; minutes = tim / 60; tim %= 60; seconds = tim; Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -13-

return *this; mytime mytime::operator *(int n) int tim = n*(hours*3600+ minutes*60 + seconds); mytime t; t.hours = tim / 3600; tim %= 3600; t.minutes = tim / 60; tim %= 60; t.seconds = tim; return t; int main() mytime t1(5,30,0); cout << "t1 : "; t1.display(); mytime t2(t1); cout << "t2(t1) : "; t2.display(); t1++; --t2; cout << "t1++ : "; t1.display(); cout << "--t2 : "; t2.display(); mytime t3 = t2 + t1*3; cout << "t3 = t2 + t1*3 : "; t3.display(); t1 = t3 - t1; cout << "t1 = t3 - t1 : "; t1.display(); return 0; ΣΗΜΕΙΩΣΗ Παρόµοια µπορούν να οριστούν και οι πράξεις: t1--, ++t1. Εργαστήριο Αντικειµενοστραφούς Προγραµµατισµού µε C++ - Μάθηµα 4 ο -14-