C++ / ROOT Ι. Παπαδόπουλος Περιεχόμενα Βασικές έννοιες αντικειμενο- στρέφειας Κλάσεις & Αντικείμενα Δήλωση κλάσης constructors destructor Υλοποίηση μεθόδων Παράδειγμα προγράμματος Δείκτες προς αντικείμενα Δείκτης this Εργαλεία make doxygen 1/18 Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Νοέμβριος 2018
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
2 Κλάσεις & ΑντικείμεναΔήλωση κλάσηςΜέθοδοι κατασκευής αντικειμένων (constructors)Μέθοδος καταστροφής αντικειμένων (destructor)Υλοποίηση μεθόδων κλάσηςΠρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)Δείκτες προς αντικείμενα (testRatio2.cpp)Δείκτης this (αυτο-αναφορά αντικειμένου)
3 Εργαλεία αυτοματοποίησηςΑυτοματοποίηση μεταγλώττισης με το πρόγραμμα makeΑυτόματη τεκμηρίωση πηγαίου κώδικα (πρόγραμμα doxygen)
Αναγνώριση και εστίαση στις κοινές ιδιότητες των αντικειμένων και των διαδικασιών χειρισμούτους.Απλοποιημένη περιγραφή ενός περίπλοκου συστήματος.
Κελυφοποίηση (encapsulation)
Απόκρυψη των λεπτομερειών υλοποίησης εντός αντικειμένου από το υπόλοιπο σύστημα.Κανένα σύστημα δεν πρέπει να εξαρτάται από τις λεπτομέρειες ενός άλλου συστήματος.
∆ομικότητα (modularity)
Κατάτμηση ενός σύνθετου συστήματος σε επιμέρους απλούστερα, για ευκολότερο χειρισμό τηςπολυπλοκότητας.Ανεξάρτητη ανάπτυξη και συντήρηση των επιμέρους συστημάτων.
Ιεραρχία (hierarchy)
Ταξινόμηση κλάσεων βάσει σχέσεων κληρονομικότητας, επέκτασης, αφαίρεσης, κ.ο.κ.Όσο πιο κάτω στην ιεραρχία βρίσκεται μία κλάση, τόσο πιο εξειδικευμένη είναι. Π.χ.Έμβιο← Ζώο← Σπονδυλωτό← Θηλαστικό← Σαρκοφάγο← Αιλουροειδές← Γάτα
Αναγνώριση και εστίαση στις κοινές ιδιότητες των αντικειμένων και των διαδικασιών χειρισμούτους.Απλοποιημένη περιγραφή ενός περίπλοκου συστήματος.
Κελυφοποίηση (encapsulation)
Απόκρυψη των λεπτομερειών υλοποίησης εντός αντικειμένου από το υπόλοιπο σύστημα.Κανένα σύστημα δεν πρέπει να εξαρτάται από τις λεπτομέρειες ενός άλλου συστήματος.
∆ομικότητα (modularity)
Κατάτμηση ενός σύνθετου συστήματος σε επιμέρους απλούστερα, για ευκολότερο χειρισμό τηςπολυπλοκότητας.Ανεξάρτητη ανάπτυξη και συντήρηση των επιμέρους συστημάτων.
Ιεραρχία (hierarchy)
Ταξινόμηση κλάσεων βάσει σχέσεων κληρονομικότητας, επέκτασης, αφαίρεσης, κ.ο.κ.Όσο πιο κάτω στην ιεραρχία βρίσκεται μία κλάση, τόσο πιο εξειδικευμένη είναι. Π.χ.Έμβιο← Ζώο← Σπονδυλωτό← Θηλαστικό← Σαρκοφάγο← Αιλουροειδές← Γάτα
Αναγνώριση και εστίαση στις κοινές ιδιότητες των αντικειμένων και των διαδικασιών χειρισμούτους.Απλοποιημένη περιγραφή ενός περίπλοκου συστήματος.
Κελυφοποίηση (encapsulation)
Απόκρυψη των λεπτομερειών υλοποίησης εντός αντικειμένου από το υπόλοιπο σύστημα.Κανένα σύστημα δεν πρέπει να εξαρτάται από τις λεπτομέρειες ενός άλλου συστήματος.
∆ομικότητα (modularity)
Κατάτμηση ενός σύνθετου συστήματος σε επιμέρους απλούστερα, για ευκολότερο χειρισμό τηςπολυπλοκότητας.Ανεξάρτητη ανάπτυξη και συντήρηση των επιμέρους συστημάτων.
Ιεραρχία (hierarchy)
Ταξινόμηση κλάσεων βάσει σχέσεων κληρονομικότητας, επέκτασης, αφαίρεσης, κ.ο.κ.Όσο πιο κάτω στην ιεραρχία βρίσκεται μία κλάση, τόσο πιο εξειδικευμένη είναι. Π.χ.Έμβιο← Ζώο← Σπονδυλωτό← Θηλαστικό← Σαρκοφάγο← Αιλουροειδές← Γάτα
Αναγνώριση και εστίαση στις κοινές ιδιότητες των αντικειμένων και των διαδικασιών χειρισμούτους.Απλοποιημένη περιγραφή ενός περίπλοκου συστήματος.
Κελυφοποίηση (encapsulation)
Απόκρυψη των λεπτομερειών υλοποίησης εντός αντικειμένου από το υπόλοιπο σύστημα.Κανένα σύστημα δεν πρέπει να εξαρτάται από τις λεπτομέρειες ενός άλλου συστήματος.
∆ομικότητα (modularity)
Κατάτμηση ενός σύνθετου συστήματος σε επιμέρους απλούστερα, για ευκολότερο χειρισμό τηςπολυπλοκότητας.Ανεξάρτητη ανάπτυξη και συντήρηση των επιμέρους συστημάτων.
Ιεραρχία (hierarchy)
Ταξινόμηση κλάσεων βάσει σχέσεων κληρονομικότητας, επέκτασης, αφαίρεσης, κ.ο.κ.Όσο πιο κάτω στην ιεραρχία βρίσκεται μία κλάση, τόσο πιο εξειδικευμένη είναι. Π.χ.Έμβιο← Ζώο← Σπονδυλωτό← Θηλαστικό← Σαρκοφάγο← Αιλουροειδές← Γάτα
C++ / ROOT
Ι. Παπαδόπουλος
Περιεχόμενα
Βασικές έννοιεςαντικειμενο-στρέφειας
Κλάσεις &ΑντικείμεναΔήλωση κλάσης
constructors
destructor
Υλοποίηση μεθόδων
Παράδειγμαπρογράμματος
Δείκτες προςαντικείμενα
Δείκτης this
Εργαλείαmake
doxygen
6/18
Κλάσεις & Αντικείμενα
C++ / ROOT
Ι. Παπαδόπουλος
Περιεχόμενα
Βασικές έννοιεςαντικειμενο-στρέφειας
Κλάσεις &ΑντικείμεναΔήλωση κλάσης
constructors
destructor
Υλοποίηση μεθόδων
Παράδειγμαπρογράμματος
Δείκτες προςαντικείμενα
Δείκτης this
Εργαλείαmake
doxygen
7/18
Τι είναι αντικείμενο και τι κλάση;
Αντικείμενο
Οποιαδήποτε οντότητα η οποία μπορεί να αποθηκεύει μέσα της δεδομένα, καθώς και μεθόδους γιατη διαχείριση των δεδομένων αυτών.
Κλάση
Είναι ένας σύνθετος τύπος δεδομένων, που ορίζεται από τον χρήστη και μπορεί ναπεριλαμβάνει στοιχεία όπως μεταβλητές βασικών τύπων, αντικείμενα άλλων κλάσεων,συναρτήσεις, ακόμη και τελεστές που (επαν-)υλοποιεί.Περιγράφει μία κατηγορία αντικειμένων, τα οποία έχουν ίδια δομή και συμπεριφοράΛειτουργεί ως πρότυπο / μήτρα για να κατασκευάζονται νέα αντικείμενα, δηλαδή νέαστιγμιότυπα (instances) της κλάσης.Μία κλάση μπορεί να χρησιμοποιηθεί μέσω της διεπαφής της (interface), που προκύπτει από τηδήλωσή της (class declaration), και πιο συγκεκριμένα από το κοινόχρηστο (public) μέρος αυτής.Η υλοποίηση της κλάσης, είναι εσωτερική της υπόθεση και αποκρύπτεται από όσους τηχρησιμοποιούν (κελυφοποίηση, encapsulation).
C++ / ROOT
Ι. Παπαδόπουλος
Περιεχόμενα
Βασικές έννοιεςαντικειμενο-στρέφειας
Κλάσεις &ΑντικείμεναΔήλωση κλάσης
constructors
destructor
Υλοποίηση μεθόδων
Παράδειγμαπρογράμματος
Δείκτες προςαντικείμενα
Δείκτης this
Εργαλείαmake
doxygen
7/18
Τι είναι αντικείμενο και τι κλάση;
Αντικείμενο
Οποιαδήποτε οντότητα η οποία μπορεί να αποθηκεύει μέσα της δεδομένα, καθώς και μεθόδους γιατη διαχείριση των δεδομένων αυτών.
Κλάση
Είναι ένας σύνθετος τύπος δεδομένων, που ορίζεται από τον χρήστη και μπορεί ναπεριλαμβάνει στοιχεία όπως μεταβλητές βασικών τύπων, αντικείμενα άλλων κλάσεων,συναρτήσεις, ακόμη και τελεστές που (επαν-)υλοποιεί.Περιγράφει μία κατηγορία αντικειμένων, τα οποία έχουν ίδια δομή και συμπεριφοράΛειτουργεί ως πρότυπο / μήτρα για να κατασκευάζονται νέα αντικείμενα, δηλαδή νέαστιγμιότυπα (instances) της κλάσης.Μία κλάση μπορεί να χρησιμοποιηθεί μέσω της διεπαφής της (interface), που προκύπτει από τηδήλωσή της (class declaration), και πιο συγκεκριμένα από το κοινόχρηστο (public) μέρος αυτής.Η υλοποίηση της κλάσης, είναι εσωτερική της υπόθεση και αποκρύπτεται από όσους τηχρησιμοποιούν (κελυφοποίηση, encapsulation).
Μία κλάση δηλώνεται στη C++ με τηλέξη class και το όνομά της (π.χ. στηγραμμή 4: Ratio). Συνηθίζεται το όνομαμίας κλάσης να ξεκινά με κεφαλαίογράμμα.
Ακολουθούν οι δηλώσεις των πεδίωνπου αφορούν τη δομή της κλάσης(γραμμές 5-19):Περιλαμβάνονται μέθοδοι(συναρτήσεις) κατασκευής καικαταστροφής, μέθοδοι πρόσβασης,άλλες μέθοδοι και δεδομένα (απλώντύπων ή και άλλων αντικειμένων).Τα πεδία της κλάσης δηλώνονται εντός
{ };Προσοχή στο τελικό ερωτηματικό…
Η οδηγία #pragma once (γραμμή 2)προς τον προ-μεταγλωττιστή,εξασφαλίζει ότι το περιεχόμενο τουαρχείου θα διαβαστεί μόνο μία φοράκατά τη μεταγλώττιση, ακόμη κι αναυτό κληθεί περισσότερες φορές μεεντολές #include "Ratio.h".
Μία κλάση δηλώνεται στη C++ με τηλέξη class και το όνομά της (π.χ. στηγραμμή 4: Ratio). Συνηθίζεται το όνομαμίας κλάσης να ξεκινά με κεφαλαίογράμμα.Ακολουθούν οι δηλώσεις των πεδίωνπου αφορούν τη δομή της κλάσης(γραμμές 5-19):Περιλαμβάνονται μέθοδοι(συναρτήσεις) κατασκευής καικαταστροφής, μέθοδοι πρόσβασης,άλλες μέθοδοι και δεδομένα (απλώντύπων ή και άλλων αντικειμένων).
Τα πεδία της κλάσης δηλώνονται εντός{ };
Προσοχή στο τελικό ερωτηματικό…
Η οδηγία #pragma once (γραμμή 2)προς τον προ-μεταγλωττιστή,εξασφαλίζει ότι το περιεχόμενο τουαρχείου θα διαβαστεί μόνο μία φοράκατά τη μεταγλώττιση, ακόμη κι αναυτό κληθεί περισσότερες φορές μεεντολές #include "Ratio.h".
Μία κλάση δηλώνεται στη C++ με τηλέξη class και το όνομά της (π.χ. στηγραμμή 4: Ratio). Συνηθίζεται το όνομαμίας κλάσης να ξεκινά με κεφαλαίογράμμα.Ακολουθούν οι δηλώσεις των πεδίωνπου αφορούν τη δομή της κλάσης(γραμμές 5-19):Περιλαμβάνονται μέθοδοι(συναρτήσεις) κατασκευής καικαταστροφής, μέθοδοι πρόσβασης,άλλες μέθοδοι και δεδομένα (απλώντύπων ή και άλλων αντικειμένων).Τα πεδία της κλάσης δηλώνονται εντός
{ };Προσοχή στο τελικό ερωτηματικό…
Η οδηγία #pragma once (γραμμή 2)προς τον προ-μεταγλωττιστή,εξασφαλίζει ότι το περιεχόμενο τουαρχείου θα διαβαστεί μόνο μία φοράκατά τη μεταγλώττιση, ακόμη κι αναυτό κληθεί περισσότερες φορές μεεντολές #include "Ratio.h".
Μία κλάση δηλώνεται στη C++ με τηλέξη class και το όνομά της (π.χ. στηγραμμή 4: Ratio). Συνηθίζεται το όνομαμίας κλάσης να ξεκινά με κεφαλαίογράμμα.Ακολουθούν οι δηλώσεις των πεδίωνπου αφορούν τη δομή της κλάσης(γραμμές 5-19):Περιλαμβάνονται μέθοδοι(συναρτήσεις) κατασκευής καικαταστροφής, μέθοδοι πρόσβασης,άλλες μέθοδοι και δεδομένα (απλώντύπων ή και άλλων αντικειμένων).Τα πεδία της κλάσης δηλώνονται εντός
{ };Προσοχή στο τελικό ερωτηματικό…
Η οδηγία #pragma once (γραμμή 2)προς τον προ-μεταγλωττιστή,εξασφαλίζει ότι το περιεχόμενο τουαρχείου θα διαβαστεί μόνο μία φοράκατά τη μεταγλώττιση, ακόμη κι αναυτό κληθεί περισσότερες φορές μεεντολές #include "Ratio.h".
Κανόνας:Όλα τα δεδομένα μίας κλάσηςπρέπει να είναι ιδιωτικά (private).
Οι δεσμευμένες λέξεις/ετικέτες publicκαι private χρησιμοποιούνται για τονκαθορισμό της κληρονομικότηταςτων διαφόρων πεδίων, από τουςχρήστες της κλάσης.
public:Ό,τι δηλώνεται ως κοινόχρηστο(public), είναι ορατό/προσβάσιμο απότον χρήστη της κλάσης.Το τμήμα αυτό αποτελεί τη διεπαφή(interface) της κλάσης.private:Ό,τι δηλώνεται ως ιδιωτικό (private),δεν είναι προσβάσιμο από τον χρήστητης κλάσης.Στο διπλανό παράδειγμα, τα εσωτερικάδεδομένα της κλάσης μας (ο αριθμητήςκαι ο παρανομαστής) είναι ιδιωτικά.Αν χρειάζεται, για την πρόσβαση(ανάγνωση/get, μεταβολή/set) σταιδιωτικά δεδομένα, υλοποιούνταικατάλληλες μέθοδοι (π.χ.getNumerator() και setNumerator()).
Κανόνας:Όλα τα δεδομένα μίας κλάσηςπρέπει να είναι ιδιωτικά (private).
Οι δεσμευμένες λέξεις/ετικέτες publicκαι private χρησιμοποιούνται για τονκαθορισμό της κληρονομικότηταςτων διαφόρων πεδίων, από τουςχρήστες της κλάσης.public:Ό,τι δηλώνεται ως κοινόχρηστο(public), είναι ορατό/προσβάσιμο απότον χρήστη της κλάσης.Το τμήμα αυτό αποτελεί τη διεπαφή(interface) της κλάσης.
private:Ό,τι δηλώνεται ως ιδιωτικό (private),δεν είναι προσβάσιμο από τον χρήστητης κλάσης.Στο διπλανό παράδειγμα, τα εσωτερικάδεδομένα της κλάσης μας (ο αριθμητήςκαι ο παρανομαστής) είναι ιδιωτικά.Αν χρειάζεται, για την πρόσβαση(ανάγνωση/get, μεταβολή/set) σταιδιωτικά δεδομένα, υλοποιούνταικατάλληλες μέθοδοι (π.χ.getNumerator() και setNumerator()).
Κανόνας:Όλα τα δεδομένα μίας κλάσηςπρέπει να είναι ιδιωτικά (private).
Οι δεσμευμένες λέξεις/ετικέτες publicκαι private χρησιμοποιούνται για τονκαθορισμό της κληρονομικότηταςτων διαφόρων πεδίων, από τουςχρήστες της κλάσης.public:Ό,τι δηλώνεται ως κοινόχρηστο(public), είναι ορατό/προσβάσιμο απότον χρήστη της κλάσης.Το τμήμα αυτό αποτελεί τη διεπαφή(interface) της κλάσης.private:Ό,τι δηλώνεται ως ιδιωτικό (private),δεν είναι προσβάσιμο από τον χρήστητης κλάσης.Στο διπλανό παράδειγμα, τα εσωτερικάδεδομένα της κλάσης μας (ο αριθμητήςκαι ο παρανομαστής) είναι ιδιωτικά.
Αν χρειάζεται, για την πρόσβαση(ανάγνωση/get, μεταβολή/set) σταιδιωτικά δεδομένα, υλοποιούνταικατάλληλες μέθοδοι (π.χ.getNumerator() και setNumerator()).
Κανόνας:Όλα τα δεδομένα μίας κλάσηςπρέπει να είναι ιδιωτικά (private).
Οι δεσμευμένες λέξεις/ετικέτες publicκαι private χρησιμοποιούνται για τονκαθορισμό της κληρονομικότηταςτων διαφόρων πεδίων, από τουςχρήστες της κλάσης.public:Ό,τι δηλώνεται ως κοινόχρηστο(public), είναι ορατό/προσβάσιμο απότον χρήστη της κλάσης.Το τμήμα αυτό αποτελεί τη διεπαφή(interface) της κλάσης.private:Ό,τι δηλώνεται ως ιδιωτικό (private),δεν είναι προσβάσιμο από τον χρήστητης κλάσης.Στο διπλανό παράδειγμα, τα εσωτερικάδεδομένα της κλάσης μας (ο αριθμητήςκαι ο παρανομαστής) είναι ιδιωτικά.Αν χρειάζεται, για την πρόσβαση(ανάγνωση/get, μεταβολή/set) σταιδιωτικά δεδομένα, υλοποιούνταικατάλληλες μέθοδοι (π.χ.getNumerator() και setNumerator()).
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος κατασκευής εκτελείται κατάτη δημιουργία αντικειμένων(στιγμιοτύπων) μίας κλάσης.
Η εξ ορισμού μέθοδος κατασκευής(default constructor) υπάρχει για κάθεκλάση, και δεν έχει κανένα όρισμα. Τοόνομά της είναι ίδιο με το όνομα τηςκλάσης, π.χ. Ratio() .Ανάλογα με τις ανάγκες πουπροκύπτουν από τον σχεδιασμό μίαςκλάσης, μπορούν να υπάρχουνπερισσότερες από μία μέθοδοικατασκευής (constructors),με διαφορετική υπογραφή η κάθε μία(constructor overloading).Οι μέθοδοι κατασκευής δεν έχουν τύποκαι δεν επιστρέφουν τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος κατασκευής εκτελείται κατάτη δημιουργία αντικειμένων(στιγμιοτύπων) μίας κλάσης.Η εξ ορισμού μέθοδος κατασκευής(default constructor) υπάρχει για κάθεκλάση, και δεν έχει κανένα όρισμα. Τοόνομά της είναι ίδιο με το όνομα τηςκλάσης, π.χ. Ratio() .
Ανάλογα με τις ανάγκες πουπροκύπτουν από τον σχεδιασμό μίαςκλάσης, μπορούν να υπάρχουνπερισσότερες από μία μέθοδοικατασκευής (constructors),με διαφορετική υπογραφή η κάθε μία(constructor overloading).Οι μέθοδοι κατασκευής δεν έχουν τύποκαι δεν επιστρέφουν τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος κατασκευής εκτελείται κατάτη δημιουργία αντικειμένων(στιγμιοτύπων) μίας κλάσης.Η εξ ορισμού μέθοδος κατασκευής(default constructor) υπάρχει για κάθεκλάση, και δεν έχει κανένα όρισμα. Τοόνομά της είναι ίδιο με το όνομα τηςκλάσης, π.χ. Ratio() .Ανάλογα με τις ανάγκες πουπροκύπτουν από τον σχεδιασμό μίαςκλάσης, μπορούν να υπάρχουνπερισσότερες από μία μέθοδοικατασκευής (constructors),με διαφορετική υπογραφή η κάθε μία(constructor overloading).
Οι μέθοδοι κατασκευής δεν έχουν τύποκαι δεν επιστρέφουν τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος κατασκευής εκτελείται κατάτη δημιουργία αντικειμένων(στιγμιοτύπων) μίας κλάσης.Η εξ ορισμού μέθοδος κατασκευής(default constructor) υπάρχει για κάθεκλάση, και δεν έχει κανένα όρισμα. Τοόνομά της είναι ίδιο με το όνομα τηςκλάσης, π.χ. Ratio() .Ανάλογα με τις ανάγκες πουπροκύπτουν από τον σχεδιασμό μίαςκλάσης, μπορούν να υπάρχουνπερισσότερες από μία μέθοδοικατασκευής (constructors),με διαφορετική υπογραφή η κάθε μία(constructor overloading).Οι μέθοδοι κατασκευής δεν έχουν τύποκαι δεν επιστρέφουν τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος καταστροφής εκτελείταιόταν ζητείται η διαγραφή ενόςαντικειμένου (με την εντολή delete ήόταν το αντικείμενο βρεθεί εκτόςεμβέλειας από την περιοχή ορισμούτου). Συνήθως είναι άδεια. Έχει έννοιαόταν πρέπει να ελευθερωθεί μνήμη πουδεσμεύτηκε δυναμικά κατά τη διάρκειαζωής του στιγμιοτύπου.
Η μέθοδος καταστροφής, έχει το ίδιοόνομα με την κλάση με την πρόθεσημίας περισπωμένης, π.χ. ∼Ratio(), καιδεν έχει ορίσματα, οπότε υπάρχει μόνομία (δεν μπορεί να υπερφορτωθεί).Η μέθοδος καταστροφής δεν έχει τύποκαι δεν επιστρέφει τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος καταστροφής εκτελείταιόταν ζητείται η διαγραφή ενόςαντικειμένου (με την εντολή delete ήόταν το αντικείμενο βρεθεί εκτόςεμβέλειας από την περιοχή ορισμούτου). Συνήθως είναι άδεια. Έχει έννοιαόταν πρέπει να ελευθερωθεί μνήμη πουδεσμεύτηκε δυναμικά κατά τη διάρκειαζωής του στιγμιοτύπου.Η μέθοδος καταστροφής, έχει το ίδιοόνομα με την κλάση με την πρόθεσημίας περισπωμένης, π.χ. ∼Ratio(), καιδεν έχει ορίσματα, οπότε υπάρχει μόνομία (δεν μπορεί να υπερφορτωθεί).
Η μέθοδος καταστροφής δεν έχει τύποκαι δεν επιστρέφει τίποτε.
Κλάση: πρότυπο/μήτρα για την κατασκευή αντικειμένωνΑντικείμενο:Δημιουργείται καλώντας μία μέθοδο κατασκευής(constructor) της κλάσης.Καταστρέφεται όταν το αντικείμενο καλέσειτη μέθοδο κατάστροφής του (destructor).
Η μέθοδος καταστροφής εκτελείταιόταν ζητείται η διαγραφή ενόςαντικειμένου (με την εντολή delete ήόταν το αντικείμενο βρεθεί εκτόςεμβέλειας από την περιοχή ορισμούτου). Συνήθως είναι άδεια. Έχει έννοιαόταν πρέπει να ελευθερωθεί μνήμη πουδεσμεύτηκε δυναμικά κατά τη διάρκειαζωής του στιγμιοτύπου.Η μέθοδος καταστροφής, έχει το ίδιοόνομα με την κλάση με την πρόθεσημίας περισπωμένης, π.χ. ∼Ratio(), καιδεν έχει ορίσματα, οπότε υπάρχει μόνομία (δεν μπορεί να υπερφορτωθεί).Η μέθοδος καταστροφής δεν έχει τύποκαι δεν επιστρέφει τίποτε.
Όλες οι μέθοδοι που δηλώθηκαν στοαρχείο Ratio.h, υλοποιούνται εντός τουαρχείου Ratio.cpp.
Στο παράδειγμά μας υλοποιείται ηκλάση Ratio με την οποία θέλουμε ναπεριγράψουμε και να χειριστούμερητούς αριθμούς.Με την ολοκλήρωση της υλοποίησης(implementation) των μεθόδων τηςκλάσης, είναι έτοιμη να χρησιμοποιηθεί,αφού μεταγλωττιστεί:
g++ -std=c++11 -c Ratio.cpp
Από τη μεταγλώττιση προκύπτει τοαρχείο Ratio.o αντικειμενικού κώδικα(object file), το οποίο μπορεί ναχρησιμοποιηθεί αργότερα για τηνπαραγωγή ενός τελικού εκτελέσιμουαρχείου.
Όλες οι μέθοδοι που δηλώθηκαν στοαρχείο Ratio.h, υλοποιούνται εντός τουαρχείου Ratio.cpp.Στο παράδειγμά μας υλοποιείται ηκλάση Ratio με την οποία θέλουμε ναπεριγράψουμε και να χειριστούμερητούς αριθμούς.
Με την ολοκλήρωση της υλοποίησης(implementation) των μεθόδων τηςκλάσης, είναι έτοιμη να χρησιμοποιηθεί,αφού μεταγλωττιστεί:
g++ -std=c++11 -c Ratio.cpp
Από τη μεταγλώττιση προκύπτει τοαρχείο Ratio.o αντικειμενικού κώδικα(object file), το οποίο μπορεί ναχρησιμοποιηθεί αργότερα για τηνπαραγωγή ενός τελικού εκτελέσιμουαρχείου.
Όλες οι μέθοδοι που δηλώθηκαν στοαρχείο Ratio.h, υλοποιούνται εντός τουαρχείου Ratio.cpp.Στο παράδειγμά μας υλοποιείται ηκλάση Ratio με την οποία θέλουμε ναπεριγράψουμε και να χειριστούμερητούς αριθμούς.Με την ολοκλήρωση της υλοποίησης(implementation) των μεθόδων τηςκλάσης, είναι έτοιμη να χρησιμοποιηθεί,αφού μεταγλωττιστεί:
g++ -std=c++11 -c Ratio.cpp
Από τη μεταγλώττιση προκύπτει τοαρχείο Ratio.o αντικειμενικού κώδικα(object file), το οποίο μπορεί ναχρησιμοποιηθεί αργότερα για τηνπαραγωγή ενός τελικού εκτελέσιμουαρχείου.
Όλες οι μέθοδοι που δηλώθηκαν στοαρχείο Ratio.h, υλοποιούνται εντός τουαρχείου Ratio.cpp.Στο παράδειγμά μας υλοποιείται ηκλάση Ratio με την οποία θέλουμε ναπεριγράψουμε και να χειριστούμερητούς αριθμούς.Με την ολοκλήρωση της υλοποίησης(implementation) των μεθόδων τηςκλάσης, είναι έτοιμη να χρησιμοποιηθεί,αφού μεταγλωττιστεί:
g++ -std=c++11 -c Ratio.cpp
Από τη μεταγλώττιση προκύπτει τοαρχείο Ratio.o αντικειμενικού κώδικα(object file), το οποίο μπορεί ναχρησιμοποιηθεί αργότερα για τηνπαραγωγή ενός τελικού εκτελέσιμουαρχείου.
C++ / ROOT
Ι. Παπαδόπουλος
Περιεχόμενα
Βασικές έννοιεςαντικειμενο-στρέφειας
Κλάσεις &ΑντικείμεναΔήλωση κλάσης
constructors
destructor
Υλοποίηση μεθόδων
Παράδειγμαπρογράμματος
Δείκτες προςαντικείμενα
Δείκτης this
Εργαλείαmake
doxygen
13/18
Πρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)1 // αρχείο testRatio.cpp2 #include <iostream>3 #include "Ratio.h"4 using namespace std;56 int main() {7 int i=37;8 int j=11;9 Ratio r1; // εξ'ορισμού μέθοδος κατασκευής: 0/110 Ratio r2(15); // κατασκευή με ένα όρισμα: 15/111 Ratio r3(3,4); // κατασκευή με δύο ορίσματα: 3/41213 cout << "r1="; r1.print(); cout << endl;14 cout << "r2="; r2.print(); cout << endl;15 cout << "r3="; r3.print(); cout << endl;1617 r1.setNumerator(i);18 cout << "r1="; r1.print(); cout << endl;19 r1.setDenominator(j);20 cout << "r1="; r1.print(); cout << endl;2122 return 0;23 }
Για να δημιουργήσουμε το τελικό εκτελέσιμο αρ-χείο, συνδυάζουμε τα object files που πλέον έχουμε:g++ -std=c++11 Ratio.o testRatio.o -o testRatio.exe
Τα r1, r2 και r3 δηλώνονται ωςαντικείμενα της κλάσης Ratio. Ανάλογαμε τα ορίσματα που δίνονται, ομεταγλωτιστής αποφασίζει κάθε φοράποια μέθοδος κατασκευής θαχρησιμοποιηθεί.
Για την κλήση μεθόδων ενόςαντικειμένου, χρησιμοποιείται οτελεστής επιλογής '.' (τελεία).Χρησιμοποιώντας τις μεθόδουςπρόσβασης, μπορούμε να λάβουμε ή νααλλάξουμε τις ιδιωτικές μεταβλητέςενός αντικειμένου. Στο παράδειγμααλλάζουμε τον αριθμητή και τονπαρανομαστή του r1.Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Πρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)1 // αρχείο testRatio.cpp2 #include <iostream>3 #include "Ratio.h"4 using namespace std;56 int main() {7 int i=37;8 int j=11;9 Ratio r1; // εξ'ορισμού μέθοδος κατασκευής: 0/110 Ratio r2(15); // κατασκευή με ένα όρισμα: 15/111 Ratio r3(3,4); // κατασκευή με δύο ορίσματα: 3/41213 cout << "r1="; r1.print(); cout << endl;14 cout << "r2="; r2.print(); cout << endl;15 cout << "r3="; r3.print(); cout << endl;1617 r1.setNumerator(i);18 cout << "r1="; r1.print(); cout << endl;19 r1.setDenominator(j);20 cout << "r1="; r1.print(); cout << endl;2122 return 0;23 }
Για να δημιουργήσουμε το τελικό εκτελέσιμο αρ-χείο, συνδυάζουμε τα object files που πλέον έχουμε:g++ -std=c++11 Ratio.o testRatio.o -o testRatio.exe
Τα r1, r2 και r3 δηλώνονται ωςαντικείμενα της κλάσης Ratio. Ανάλογαμε τα ορίσματα που δίνονται, ομεταγλωτιστής αποφασίζει κάθε φοράποια μέθοδος κατασκευής θαχρησιμοποιηθεί.Για την κλήση μεθόδων ενόςαντικειμένου, χρησιμοποιείται οτελεστής επιλογής '.' (τελεία).
Χρησιμοποιώντας τις μεθόδουςπρόσβασης, μπορούμε να λάβουμε ή νααλλάξουμε τις ιδιωτικές μεταβλητέςενός αντικειμένου. Στο παράδειγμααλλάζουμε τον αριθμητή και τονπαρανομαστή του r1.Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Πρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)1 // αρχείο testRatio.cpp2 #include <iostream>3 #include "Ratio.h"4 using namespace std;56 int main() {7 int i=37;8 int j=11;9 Ratio r1; // εξ'ορισμού μέθοδος κατασκευής: 0/110 Ratio r2(15); // κατασκευή με ένα όρισμα: 15/111 Ratio r3(3,4); // κατασκευή με δύο ορίσματα: 3/41213 cout << "r1="; r1.print(); cout << endl;14 cout << "r2="; r2.print(); cout << endl;15 cout << "r3="; r3.print(); cout << endl;1617 r1.setNumerator(i);18 cout << "r1="; r1.print(); cout << endl;19 r1.setDenominator(j);20 cout << "r1="; r1.print(); cout << endl;2122 return 0;23 }
Για να δημιουργήσουμε το τελικό εκτελέσιμο αρ-χείο, συνδυάζουμε τα object files που πλέον έχουμε:g++ -std=c++11 Ratio.o testRatio.o -o testRatio.exe
Τα r1, r2 και r3 δηλώνονται ωςαντικείμενα της κλάσης Ratio. Ανάλογαμε τα ορίσματα που δίνονται, ομεταγλωτιστής αποφασίζει κάθε φοράποια μέθοδος κατασκευής θαχρησιμοποιηθεί.Για την κλήση μεθόδων ενόςαντικειμένου, χρησιμοποιείται οτελεστής επιλογής '.' (τελεία).Χρησιμοποιώντας τις μεθόδουςπρόσβασης, μπορούμε να λάβουμε ή νααλλάξουμε τις ιδιωτικές μεταβλητέςενός αντικειμένου. Στο παράδειγμααλλάζουμε τον αριθμητή και τονπαρανομαστή του r1.
Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Πρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)1 // αρχείο testRatio.cpp2 #include <iostream>3 #include "Ratio.h"4 using namespace std;56 int main() {7 int i=37;8 int j=11;9 Ratio r1; // εξ'ορισμού μέθοδος κατασκευής: 0/110 Ratio r2(15); // κατασκευή με ένα όρισμα: 15/111 Ratio r3(3,4); // κατασκευή με δύο ορίσματα: 3/41213 cout << "r1="; r1.print(); cout << endl;14 cout << "r2="; r2.print(); cout << endl;15 cout << "r3="; r3.print(); cout << endl;1617 r1.setNumerator(i);18 cout << "r1="; r1.print(); cout << endl;19 r1.setDenominator(j);20 cout << "r1="; r1.print(); cout << endl;2122 return 0;23 }
Για να δημιουργήσουμε το τελικό εκτελέσιμο αρ-χείο, συνδυάζουμε τα object files που πλέον έχουμε:g++ -std=c++11 Ratio.o testRatio.o -o testRatio.exe
Τα r1, r2 και r3 δηλώνονται ωςαντικείμενα της κλάσης Ratio. Ανάλογαμε τα ορίσματα που δίνονται, ομεταγλωτιστής αποφασίζει κάθε φοράποια μέθοδος κατασκευής θαχρησιμοποιηθεί.Για την κλήση μεθόδων ενόςαντικειμένου, χρησιμοποιείται οτελεστής επιλογής '.' (τελεία).Χρησιμοποιώντας τις μεθόδουςπρόσβασης, μπορούμε να λάβουμε ή νααλλάξουμε τις ιδιωτικές μεταβλητέςενός αντικειμένου. Στο παράδειγμααλλάζουμε τον αριθμητή και τονπαρανομαστή του r1.Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Πρόγραμμα που χρησιμοποιεί την κλάση Ratio (testRatio.cpp)1 // αρχείο testRatio.cpp2 #include <iostream>3 #include "Ratio.h"4 using namespace std;56 int main() {7 int i=37;8 int j=11;9 Ratio r1; // εξ'ορισμού μέθοδος κατασκευής: 0/110 Ratio r2(15); // κατασκευή με ένα όρισμα: 15/111 Ratio r3(3,4); // κατασκευή με δύο ορίσματα: 3/41213 cout << "r1="; r1.print(); cout << endl;14 cout << "r2="; r2.print(); cout << endl;15 cout << "r3="; r3.print(); cout << endl;1617 r1.setNumerator(i);18 cout << "r1="; r1.print(); cout << endl;19 r1.setDenominator(j);20 cout << "r1="; r1.print(); cout << endl;2122 return 0;23 }
Για να δημιουργήσουμε το τελικό εκτελέσιμο αρ-χείο, συνδυάζουμε τα object files που πλέον έχουμε:g++ -std=c++11 Ratio.o testRatio.o -o testRatio.exe
Τα r1, r2 και r3 δηλώνονται ωςαντικείμενα της κλάσης Ratio. Ανάλογαμε τα ορίσματα που δίνονται, ομεταγλωτιστής αποφασίζει κάθε φοράποια μέθοδος κατασκευής θαχρησιμοποιηθεί.Για την κλήση μεθόδων ενόςαντικειμένου, χρησιμοποιείται οτελεστής επιλογής '.' (τελεία).Χρησιμοποιώντας τις μεθόδουςπρόσβασης, μπορούμε να λάβουμε ή νααλλάξουμε τις ιδιωτικές μεταβλητέςενός αντικειμένου. Στο παράδειγμααλλάζουμε τον αριθμητή και τονπαρανομαστή του r1.Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.
Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).
Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()
Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'
Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Το r1 δηλώνεται ως αντικείμενο τηςκλάσης Ratio. Χρησιμοποιώντας τοντελεστή επιλογής μέλους '.', θέτουμετον αριθμητή και τον παρανομαστή του.Τα p1 και p2 δηλώνονται ως δείκτες σεαντικείμενα Ratio. Το p1 αρχικοποιείται(γραμμή 12) δεσμεύοντας μνήμη(τελεστής new), ενώ το p2 δείχνει στηδιεύθυνση του r1 (γραμμή 14).Επιλογή μέλους για αντικείμενα:τελεστής '.', π.χ. r1.getNumerator()Επιλογή μέλους για δείκτες προςαντικείμενα: τελεστής '->', π.χ.p1->print() ≡ (*p1).print()Προτιμούμε τον τελεστή '->'Με την ολοκλήρωση της ανάπτυξης τουπρογράμματος, μπορούμε να τομεταγλωττίσουμε:
Όταν ένα αντικείμενο καλεί μία μέθοδότου (μη στατική), περνά σιωπηλά ωςόρισμα ένας δείκτης (με όνομα this)προς το ίδιο το αντικείμενο.
Ο δείκτης this είναι διαθέσιμος εντόςτης καλούμενης μεθόδου, και μπορεί γιαπαράδειγμα να χρησιμοποοιηθεί γιατην πρόσβαση στα ιδιωτικά (private)δεδομένα του εν λόγω αντικειμένου.Στο διπλανό παράδειγμα, η μέθοδοςκατασκευής που υλοποιείται στιςγραμμές 16-23 δέχεται ως ορίσματα ταx, y και z. Όμως τα ονόματά τους είναισυνώνυμα των ιδιωτικών δεδομένων x, yκαι z του αντικειμένου.Ο δείκτης this χρησιμοποιείται στηνπερίπτωση αυτή για να ξεχωρίσει ταιδιωτικά δεδομένα από τα ονόματα τωνορισμάτων.Για τη μεταγλώττιση του διπλανούπρογράμματος:g++ -std=c++11 test.cpp -o test.exe
Όταν ένα αντικείμενο καλεί μία μέθοδότου (μη στατική), περνά σιωπηλά ωςόρισμα ένας δείκτης (με όνομα this)προς το ίδιο το αντικείμενο.Ο δείκτης this είναι διαθέσιμος εντόςτης καλούμενης μεθόδου, και μπορεί γιαπαράδειγμα να χρησιμοποοιηθεί γιατην πρόσβαση στα ιδιωτικά (private)δεδομένα του εν λόγω αντικειμένου.
Στο διπλανό παράδειγμα, η μέθοδοςκατασκευής που υλοποιείται στιςγραμμές 16-23 δέχεται ως ορίσματα ταx, y και z. Όμως τα ονόματά τους είναισυνώνυμα των ιδιωτικών δεδομένων x, yκαι z του αντικειμένου.Ο δείκτης this χρησιμοποιείται στηνπερίπτωση αυτή για να ξεχωρίσει ταιδιωτικά δεδομένα από τα ονόματα τωνορισμάτων.Για τη μεταγλώττιση του διπλανούπρογράμματος:g++ -std=c++11 test.cpp -o test.exe
Όταν ένα αντικείμενο καλεί μία μέθοδότου (μη στατική), περνά σιωπηλά ωςόρισμα ένας δείκτης (με όνομα this)προς το ίδιο το αντικείμενο.Ο δείκτης this είναι διαθέσιμος εντόςτης καλούμενης μεθόδου, και μπορεί γιαπαράδειγμα να χρησιμοποοιηθεί γιατην πρόσβαση στα ιδιωτικά (private)δεδομένα του εν λόγω αντικειμένου.Στο διπλανό παράδειγμα, η μέθοδοςκατασκευής που υλοποιείται στιςγραμμές 16-23 δέχεται ως ορίσματα ταx, y και z. Όμως τα ονόματά τους είναισυνώνυμα των ιδιωτικών δεδομένων x, yκαι z του αντικειμένου.
Ο δείκτης this χρησιμοποιείται στηνπερίπτωση αυτή για να ξεχωρίσει ταιδιωτικά δεδομένα από τα ονόματα τωνορισμάτων.Για τη μεταγλώττιση του διπλανούπρογράμματος:g++ -std=c++11 test.cpp -o test.exe
Όταν ένα αντικείμενο καλεί μία μέθοδότου (μη στατική), περνά σιωπηλά ωςόρισμα ένας δείκτης (με όνομα this)προς το ίδιο το αντικείμενο.Ο δείκτης this είναι διαθέσιμος εντόςτης καλούμενης μεθόδου, και μπορεί γιαπαράδειγμα να χρησιμοποοιηθεί γιατην πρόσβαση στα ιδιωτικά (private)δεδομένα του εν λόγω αντικειμένου.Στο διπλανό παράδειγμα, η μέθοδοςκατασκευής που υλοποιείται στιςγραμμές 16-23 δέχεται ως ορίσματα ταx, y και z. Όμως τα ονόματά τους είναισυνώνυμα των ιδιωτικών δεδομένων x, yκαι z του αντικειμένου.Ο δείκτης this χρησιμοποιείται στηνπερίπτωση αυτή για να ξεχωρίσει ταιδιωτικά δεδομένα από τα ονόματα τωνορισμάτων.
Για τη μεταγλώττιση του διπλανούπρογράμματος:g++ -std=c++11 test.cpp -o test.exe
Όταν ένα αντικείμενο καλεί μία μέθοδότου (μη στατική), περνά σιωπηλά ωςόρισμα ένας δείκτης (με όνομα this)προς το ίδιο το αντικείμενο.Ο δείκτης this είναι διαθέσιμος εντόςτης καλούμενης μεθόδου, και μπορεί γιαπαράδειγμα να χρησιμοποοιηθεί γιατην πρόσβαση στα ιδιωτικά (private)δεδομένα του εν λόγω αντικειμένου.Στο διπλανό παράδειγμα, η μέθοδοςκατασκευής που υλοποιείται στιςγραμμές 16-23 δέχεται ως ορίσματα ταx, y και z. Όμως τα ονόματά τους είναισυνώνυμα των ιδιωτικών δεδομένων x, yκαι z του αντικειμένου.Ο δείκτης this χρησιμοποιείται στηνπερίπτωση αυτή για να ξεχωρίσει ταιδιωτικά δεδομένα από τα ονόματα τωνορισμάτων.Για τη μεταγλώττιση του διπλανούπρογράμματος:g++ -std=c++11 test.cpp -o test.exe
Όταν ένα project περιλαμβάνει πολλάαρχεία πηγαίου κώδικα, αν γίνει κάποιααλλαγή σε ένα μόνο από αυτά, δεν είναιανάγκη να μεταγλωτιστούν όλα τααρχεία πηγαίου κώδικα, αλλά μόνονόσα επηρεάζονται από την αλλαγή πουέγινε.
Τα περισσότερα αντικειμενικά αρχείαμπορούν να μείνουν ως είχαν, και νασυνδυαστούν εκ νέου με όσα άλλαξανγια την παραγωγή του νέουεκτελέσιμου αρχείου.Η διαδικασία αυτή μπορεί να καταστείαρκετά επίπονη, και το πρόγραμμαmake αναλαμβάνει να απλοποιήσει τηδιαδικασία. Αρκεί να γράψουμε έναmakefile με τους κανόνες που διέπουντη μεταγλώττιση του project.Το πρόγραμμα make αναλαμβάνει απόκει και πέρα να μεταγλωττίσει ό,τιχρειάζεται και να φτιάξει το νέοεκτελέσιμο.
Όταν ένα project περιλαμβάνει πολλάαρχεία πηγαίου κώδικα, αν γίνει κάποιααλλαγή σε ένα μόνο από αυτά, δεν είναιανάγκη να μεταγλωτιστούν όλα τααρχεία πηγαίου κώδικα, αλλά μόνονόσα επηρεάζονται από την αλλαγή πουέγινε.Τα περισσότερα αντικειμενικά αρχείαμπορούν να μείνουν ως είχαν, και νασυνδυαστούν εκ νέου με όσα άλλαξανγια την παραγωγή του νέουεκτελέσιμου αρχείου.
Η διαδικασία αυτή μπορεί να καταστείαρκετά επίπονη, και το πρόγραμμαmake αναλαμβάνει να απλοποιήσει τηδιαδικασία. Αρκεί να γράψουμε έναmakefile με τους κανόνες που διέπουντη μεταγλώττιση του project.Το πρόγραμμα make αναλαμβάνει απόκει και πέρα να μεταγλωττίσει ό,τιχρειάζεται και να φτιάξει το νέοεκτελέσιμο.
Όταν ένα project περιλαμβάνει πολλάαρχεία πηγαίου κώδικα, αν γίνει κάποιααλλαγή σε ένα μόνο από αυτά, δεν είναιανάγκη να μεταγλωτιστούν όλα τααρχεία πηγαίου κώδικα, αλλά μόνονόσα επηρεάζονται από την αλλαγή πουέγινε.Τα περισσότερα αντικειμενικά αρχείαμπορούν να μείνουν ως είχαν, και νασυνδυαστούν εκ νέου με όσα άλλαξανγια την παραγωγή του νέουεκτελέσιμου αρχείου.Η διαδικασία αυτή μπορεί να καταστείαρκετά επίπονη, και το πρόγραμμαmake αναλαμβάνει να απλοποιήσει τηδιαδικασία. Αρκεί να γράψουμε έναmakefile με τους κανόνες που διέπουντη μεταγλώττιση του project.Το πρόγραμμα make αναλαμβάνει απόκει και πέρα να μεταγλωττίσει ό,τιχρειάζεται και να φτιάξει το νέοεκτελέσιμο.
Αυτόματη τεκμηρίωση πηγαίου κώδικα (πρόγραμμα doxygen)Το λογισμικό doxygen σαρώνει όλα τα αρχεία πηγαίου κώδικα και δημιουργεί αυτομάτωςτεκμηρίωση (documentation) σχετικά με τη δομή και την ιεραρχία ενός project.
Η τεκμηρίωση μπορεί να ληφθεί σε διάφορες μορφές, π.χ. στη μορφή ιστοσελίδας, σε μορφήLATEX, PDF κ.ο.κ.Υπάρχει δυνατότητα εισαγωγής σχολίων συγκεκριμένης σύνταξης στον πηγαίο κώδικα γιαπληρέστερη και λεπτομερέστερη τεκμηρίωση.
Παραδείγματα μεγάλων projects που χρησιμοποιούν το doxygen για την τεκμηρίωσή τους:Κλάση TCanvas του λογισμικού ROOTΚλάση TF1 του λογισμικού ROOTΚλάση TH1 του λογισμικού ROOTΚλάση G4ParticleGun του λογισμικού GEANT4Κλάση G4PhotoElectricEffect του λογισμικού GEANT4
Αυτόματη τεκμηρίωση πηγαίου κώδικα (πρόγραμμα doxygen)Το λογισμικό doxygen σαρώνει όλα τα αρχεία πηγαίου κώδικα και δημιουργεί αυτομάτωςτεκμηρίωση (documentation) σχετικά με τη δομή και την ιεραρχία ενός project.Η τεκμηρίωση μπορεί να ληφθεί σε διάφορες μορφές, π.χ. στη μορφή ιστοσελίδας, σε μορφήLATEX, PDF κ.ο.κ.
Υπάρχει δυνατότητα εισαγωγής σχολίων συγκεκριμένης σύνταξης στον πηγαίο κώδικα γιαπληρέστερη και λεπτομερέστερη τεκμηρίωση.
Παραδείγματα μεγάλων projects που χρησιμοποιούν το doxygen για την τεκμηρίωσή τους:Κλάση TCanvas του λογισμικού ROOTΚλάση TF1 του λογισμικού ROOTΚλάση TH1 του λογισμικού ROOTΚλάση G4ParticleGun του λογισμικού GEANT4Κλάση G4PhotoElectricEffect του λογισμικού GEANT4
Αυτόματη τεκμηρίωση πηγαίου κώδικα (πρόγραμμα doxygen)Το λογισμικό doxygen σαρώνει όλα τα αρχεία πηγαίου κώδικα και δημιουργεί αυτομάτωςτεκμηρίωση (documentation) σχετικά με τη δομή και την ιεραρχία ενός project.Η τεκμηρίωση μπορεί να ληφθεί σε διάφορες μορφές, π.χ. στη μορφή ιστοσελίδας, σε μορφήLATEX, PDF κ.ο.κ.Υπάρχει δυνατότητα εισαγωγής σχολίων συγκεκριμένης σύνταξης στον πηγαίο κώδικα γιαπληρέστερη και λεπτομερέστερη τεκμηρίωση.
Παραδείγματα μεγάλων projects που χρησιμοποιούν το doxygen για την τεκμηρίωσή τους:Κλάση TCanvas του λογισμικού ROOTΚλάση TF1 του λογισμικού ROOTΚλάση TH1 του λογισμικού ROOTΚλάση G4ParticleGun του λογισμικού GEANT4Κλάση G4PhotoElectricEffect του λογισμικού GEANT4
Αυτόματη τεκμηρίωση πηγαίου κώδικα (πρόγραμμα doxygen)Το λογισμικό doxygen σαρώνει όλα τα αρχεία πηγαίου κώδικα και δημιουργεί αυτομάτωςτεκμηρίωση (documentation) σχετικά με τη δομή και την ιεραρχία ενός project.Η τεκμηρίωση μπορεί να ληφθεί σε διάφορες μορφές, π.χ. στη μορφή ιστοσελίδας, σε μορφήLATEX, PDF κ.ο.κ.Υπάρχει δυνατότητα εισαγωγής σχολίων συγκεκριμένης σύνταξης στον πηγαίο κώδικα γιαπληρέστερη και λεπτομερέστερη τεκμηρίωση.
Παραδείγματα μεγάλων projects που χρησιμοποιούν το doxygen για την τεκμηρίωσή τους:Κλάση TCanvas του λογισμικού ROOTΚλάση TF1 του λογισμικού ROOTΚλάση TH1 του λογισμικού ROOTΚλάση G4ParticleGun του λογισμικού GEANT4Κλάση G4PhotoElectricEffect του λογισμικού GEANT4