Constructors and Destructors in C++

Σχετικά έγγραφα
Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΔΝΓΔΙΚΤΙΚΔΣ ΛΥΣΔΙΣ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΔΥΘΥΝΣΗΣ Γ ΛΥΚΔΙΟΥ ΓΔΥΤΔΡΑ 27 ΜΑΪΟΥ 2013

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

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

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

(Ενδεικηικές Απανηήζεις) ΘΔΜΑ Α. Α1. Βιέπε απόδεημε Σει. 262, ζρνιηθνύ βηβιίνπ. Α2. Βιέπε νξηζκό Σει. 141, ζρνιηθνύ βηβιίνπ

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

ΔΝΓΔΙΚΣΙΚΔ ΛΤΔΙ ΣΑ ΜΑΘΗΜΑΣΙΚΑ ΠΡΟΑΝΑΣΟΛΙΜΟΤ 2017

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

x x x x tan(2 x) x 2 2x x 1

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

ΠΔΡΗΓΡΑΦΖ ΛΔΗΣΟΤΡΓΗΚΟΣΖΣΑ ΥΔΓΗΟΤ ΑΡΗΘΜ. 1

ΘΔΜΑ 1 ο Μονάδες 5,10,10

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

Γ ΣΑΞΖ ΔΝΗΑΗΟΤ ΛΤΚΔΗΟΤ ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΘΔΣΗΚΩΝ ΚΑΗ ΟΗΚΟΝΟΜΗΚΩΝ ΠΟΤΓΩΝ ΤΝΑΡΣΖΔΗ ΟΡΗΑ ΤΝΔΥΔΗΑ (έως Θ.Bolzano) ΘΔΜΑ Α

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

ΜΑΘΗΜΑΤΙΚΑ ΘΔΤΙΚΗΣ ΚΑΙ ΤΔΦΝΟΛΟΓΙΚΗΣ ΚΑΤΔΥΘΥΝΣΗΣ Β ΛΥΚΔΙΟΥ ΤΔΣΤ(1) ΣΤΑ ΓΙΑΝΥΣΜΑΤΑ

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

Σύνθεζη ηαλανηώζεων. Έζησ έλα ζώκα πνπ εθηειεί ηαπηόρξνλα δύν αξκνληθέο ηαιαληώζεηο ηεο ίδηαο ζπρλόηεηαο πνπ πεξηγξάθνληαη από ηηο παξαθάησ εμηζώζεηο:

Ενδεικτικά Θέματα Στατιστικής ΙΙ

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

ΓΔΧΜΔΣΡΙΑ ΓΙΑ ΟΛΤΜΠΙΑΓΔ

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) =

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

Διαφορές μεταξύ αξιών και αναφορών #1

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

β) (βαζκνί: 2) Έζησ όηη ε ρξνλνινγηθή ζεηξά έρεη κέζε ηηκή 0 θαη είλαη αληηζηξέςηκε. Δίλεηαη ην αθόινπζν απνηέιεζκα από ην EViews γηα ηε :

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο κόζηος ανά μονάδα παραγωγής. Q Η ζσνάρηηζη μέζοσ κόζηοσς μας δίνει ηο ζηαθερό κόζηος ανά μονάδα παραγωγής

ΓΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη:Γςνάμειρ μεταξύ ηλεκτπικών φοπτίων

Ηλεκηπονικά Απσεία και Διεπαθέρ

x x 15 7 x 22. ΘΔΜΑ Α 3x 2 9x 4 3 3x 18x x 5 y 9x 4 Α1. i. . Η ιύζε είλαη y y x 3y y x 3 2x 6y y x x y 6 x 2y 1 y 6

ΕΞΟΡΤΞΗ & ΚΑΣΑΚΕΤΕ ΣΗΝ ΕΤΡΩΠΗ ΜΑΘΗΜΑ 43

Φςζική Πποζαναηολιζμού Γ Λςκείος. Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Έκδοζη /10/2014. Νέα λειηοσργικόηηηα - Βεληιώζεις

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

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

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

Δξγαιεία Καηαζθεπέο 1 Σάμε Δ Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ. ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Ογθνκεηξηθό δνρείν

Κεθάλαιο 7. Πξνζθνξά ηνπ θιάδνπ Μ. ΨΥΛΛΑΚΗ

Οργάνωση και Δομή Παρουσιάσεων

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Κεθάιαην 20. Ελαχιστοποίηση του κόστους

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

ΓΗΜΟΙΑ ΟΙΚΟΝΟΜΙΚΗ ΣΟΜΟ Γ

ΔΠΙΣΡΟΠΗ ΓΙΑΓΩΝΙΜΩΝ 74 ος ΠΑΝΔΛΛΗΝΙΟ ΜΑΘΗΣΙΚΟ ΓΙΑΓΩΝΙΜΟ ΣΑ ΜΑΘΗΜΑΣΙΚΑ Ο ΘΑΛΗ 19 Οκηωβρίοσ Δνδεικηικές λύζεις

Άσκηση 1 - Μοπυοποίηση Κειμένου

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

Επωηήζειρ Σωζηού Λάθοςρ ηων πανελλαδικών εξεηάζεων Σςναπηήζειρ

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

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γεσηέρα 10 Ηοσνίοσ 2019 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

(γ) Να βξεζεί ε ρξνλνεμαξηώκελε πηζαλόηεηα κέηξεζεο ηεο ζεηηθήο ηδηνηηκήο ηνπ ηειεζηή W.

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗ Προγραμματισμός H/Y-I. Περιζζόηερα για ηον έλεγτο προζπέλαζης και ηις μεθόδοσς Static

ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΣΗΜΑΤΩΝ & ΣΥΣΤΗΜΑΤΩΝ. ΜΕΤΑΣΦΗΜΑΤΙΣΜΟΣ Laplace

Αντισταθμιστική ανάλυση

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Γ Γυμνασίου ΥΟΛΕΙΟ..

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Τ ξ ε ύ ο ξ π ς ξ σ ξ ο ί ξ σ _ Ι ε ο α μ ε ι κ ό π

ΕΞΙΣΩΣΕΙΣ. (iv) (ii) (ii) (ii) 5. Γηα ηηο δηάθνξεο ηηκέο ηνπ ι λα ιπζνύλ νη εμηζώζεηο : x 6 3 9x

Transcript:

Constructors and Destructors in C++

Σύνθεζη Πνιύ ζπρλά ζηε C++ κία θιάζε κπνξεί λα πεξηέρεη ζαλ κέιεδεδνκέλα αληηθείκελα άιισλ θιάζεσλ. Πνηα είλαη ε ζεηξά κε ηελ νπνία δεκηνπξγνύληαη θαη θαηαζηξέθνληαη απηά ηα αληηθείκελα; Με πνηα ζεηξά θαινύληαη νη constructors θαη νη destructors ησλ θιάζεσλ; Πξώηα δεκηνπξγνύληαη ηα αληηθείκελα θαη θαιείηαη ν constructor ηεο εζσηεξηθήο θιάζεο θαη κεηά ηεο εμσηεξηθήο. Αληίζεηα, πξώηα θαιείηαη ν destructor ηεο εμσηεξηθήο θιάζεο θαη κεηά ηεο εζσηεξηθήο.

Παράδειγμα class Student Student() cout << "" << endl; ~Student() cout << " " << endl; ; class Classroom Student students[5]; Classroom() cout << "Creating a classroom!" << endl; ~Classroom() cout << "Destroying a classroom :( " << endl; ; class School Classroom classrooms[2]; School() cout << "Creating a school!" << endl; ~School() cout << "Destroying a school :( " << endl; ; int main() School *a_school = new School(); delete a_school; return 0;

Αποηέλεζμα Creating a classroom! Creating a classroom! Creating a school! Destroying a school :( Destroying a classroom :( Destroying a classroom :(

Δπλακηθή δέζκεπζε Σε πεξίπησζε πνπ κηα θιάζε έρεη ζαλ κέιε δεδνκέλα όρη αληηθείκελα θιάζεσλ αιιά δείθηεο ζε αληηθείκελα θιάζεσλ θαη θάλνπκε δπλακηθή δέζκεπζε ε ζεηξά ησλ εθηππώζεσλ ζα αιιάμεη δηόηη νη constructors ζα θιεζνύλ ηόηε πνπ γίλεηαη ε δέζκεπζε. Έηζη θαηά ηελ δεκηνπξγία/θαηαζηξνθή ηεο εμσηεξηθήο θιάζεο θαιείηαη ν δηθόο ηεο constructor/destructor, κέζα ζηνλ νπνίν είλαη δηθή καο επζύλε λα θαιέζνπκε ηνλ constructor/destructor ηεο εζσηεξηθήο θιάζεο κε ρξήζε new/delete.

Παράδειγμα class Student Student() cout << "" << endl; ~Student() cout << " " << endl; ; class Classroom Student *students; Classroom() students = new Student[5]; cout << "Creating a classroom!" << endl; ~Classroom() delete[] students; cout << "Destroying a classroom :( " << endl; ; class School Classroom *classrooms; School() classrooms = new Classroom[2]; cout << "Creating a school!" << endl; ~School() delete[] classrooms; cout << "Destroying a school :( " << endl; ; int main() School *a_school = new School(); delete a_school; return 0;

Αποηέλεζμα Creating a classroom! Creating a classroom! Creating a school! Destroying a classroom :( Destroying a classroom :( Destroying a school :(

Τν απνηέιεζκα κπνξεί επίζεο λα εμαξηάηαη από ην ζεκείν πνπ βάδνπκε ηηο εθηππώζεηο. Απηό δελ πξέπεη λα καο κπεξδεύεη.

Παράδειγμα class Student Student() cout << "" << endl; ~Student() cout << " " << endl; ; class Classroom Student *students; Classroom() cout << "Creating a classroom!" << endl; students = new Student[5]; ~Classroom() cout << "Destroying a classroom :( " << endl; delete[] students; ; class School Classroom *classrooms; School() cout << "Creating a school!" << endl; classrooms = new Classroom[2]; ~School() cout << "Destroying a school :( " << endl; delete[] classrooms; ; int main() School *a_school = new School(); delete a_school; return 0;

Αποηέλεζμα Creating a school! Creating a classroom! Creating a classroom! Destroying a school :( Destroying a classroom :( Destroying a classroom :(

Κληρονομικόηηηα Έλαο άιινο ηξόπνο ζύλδεζεο θιάζεσλ κεηαμύ ηνπο είλαη ε θιεξνλνκηθόηεηα. Καη ζε απηή ηελ πεξίπησζε πξώηα δεκηνπξγνύληαη ηα αληηθείκελα θαη θαιείηαη ν constructor ηεο parent/base θιάζεο θαη κεηά ηεο child/derived θιάζεο. Αληίζεηα, πξώηα θαιείηαη ν destructor ηεο child/derived θιάζεο θαη κεηά ηεο parent/base. Σε πεξίπησζε πνπ είηε ε base είηε ε child θιάζε έρνπλ αληηθείκελα θιάζεσλ σο data members (ζύλζεζε), ηζρύεη ε ζεηξά πνπ εηπώζεθε πξνεγνπκέλσο γηα ηελ ζύλζεζε.

Με άλλα λόγια: Construction: 1. Data members of base class 2. Base class 3. Data members of derived class 4. Derived class Destruction: 1. Derived class 2. Data members of derived class 3. Base class 4. Data members of base class

Παράδειγμα class Driver Driver() cout << "I am a driver!" << endl; ~Driver() cout << "Driver leaving..." << endl; ; class Passenger Passenger() cout << "I am a passenger!" << endl; ~Passenger() cout << "Passenger leaving..." << endl; ; int main() Car *car_p = new Car(); delete car_p; return 0; class Vehicle Passenger passenger; Vehicle() cout << "I am a vehicle!" << endl; ~Vehicle() cout << "Vehicle destroyed!" << endl; ; class Car: public Vehicle Driver driver; Car() cout << "I am a car!" << endl; ~Car() cout << "Car destroyed!" << endl; ;

Αποηέλεζμα I am a passenger! I am a vehicle! I am a driver! I am a car! Car destroyed! Driver leaving... Vehicle destroyed! Passenger leaving...

Ορίζμαηα by value Όηαλ κία ζπλάξηεζε παίξλεη σο όξηζκα έλα αληηθείκελν θαη όρη αλαθνξά ή δείθηε ζε αληηθείκελν, ηόηε κε ηελ θιήζε ηεο ζπλάξηεζεο απηόκαηα θαιείηαη ν copy-constructor ηεο θιάζεο ηνπ αληηθεηκέλνπ γηα λα αξρηθνπνηήζεη ην όξηζκα. Δειαδή, δεκηνπξγείηαη έλα αληίγξαθν ηνπ αληηθεηκέλνπ πνπ δόζεθε σο όξηζκα. Μέζα ζηε ζπλάξηεζε, αληί γηα ην ίδην ην αληηθείκελν πνπ δόζεθε σο όξηζκα, ρξεζηκνπνηείηαη ην αληίγξαθν πνπ δεκηνπξγήζεθε. Τν αληίγξαθν είλαη δειαδή κία ηνπηθή κεηαβιεηή θαη θαηαζηξέθεηαη κόιηο βγεη από ηελ εκβέιεηα ηεο ζπλάξηεζεο.

Όηαλ κία ζπλάξηεζε επηζηξέθεη (return) έλα αληηθείκελν, δεκηνπξγείηαη (πάιη κε ρξήζε copy constructor) θαη επηζηξέθεηαη έλα αληίγξαθν ηνπ αληηθεηκέλνπ. Απηό ην αληίγξαθν είλαη έλα πξνζσξηλό αληηθείκελν, ην νπνίν θαηαζηξέθεηαη, αθνύ πεξαζηνύλ ηα δεδνκέλα ηνπ ζηελ κεηαβιεηή πνπ ρξεζηκνπνηνύκε γηα λα απνζεθεύζνπκε ό,ηη καο επέζηξεςε ε ζπλάξηεζε. Δειαδή: Α function() A a; return a; Return Σην δηπιαλό παξάδεηγκα, θαηά ηελ επηζηξνθή από ηε ζπλάξηεζε θαιείηαη ν copy constructor πνπ δεκηνπξγεί έλα αληίγξαθν ηνπ a, ην νπνίν επηζηξέθεη ε ζπλάξηεζε function. Σηε ζπλέρεηα θαιείηαη assignment operator πνπ αλαζέηεη ηε ηηκή ηνπ αληίγξαθνπ ζηε κεηαβιεηή a1. Τέινο θαιείηαη ν destructor θαη θαηαζηξέθεη ην πξνζσξηλό αληίγξαθν ηνπ a πνπ δεκηνπξγήζεθε κε ηε return. A a1; a1 = function(); Α a2 = function(); Σηε πεξίπησζε πνπ ην επηζηξεθόκελν αληηθείκελν ρξεζηκνπνηείηαη γηα δεκηνπξγία νέου αληηθεηκέλνπ (a2) κε copy constructor, ζπλήζσο θαιείηαη κόλν έλαο copy constructor (return value optimization). Δηαθνξεηηθά ζα έπξεπε λα θιεζεί έλαο copy constructor κε ηε return, έλαο κε ηελ δεκηνπξγία ηνπ a2, θαη ηέινο ν destructor γηα λα θαηαζηξέςεη ην πξνζσξηλό αληίγξαθν ηνπ a πνπ δεκηνπξγήζεθε κε ηε return.

Παράδειγμα class A A() cout << "Constructor!" << endl; A(const A& a) cout << "Copy constructor!" << endl; A& operator=(const A& a) cout << "Assignment operator!" << endl; return *this; ~A() cout << "Destructor!" << endl; ; A function(a & a) return a; void function2(a a) cout << "Created a local variable!" << endl; int main() A a; A a1; cout << "Copy constructor, assignment operator, destructor!" << endl; a1 = function(a); cout << "Only one copy constructor this time!" << endl; A a2 = function(a); cout << "Passing argument by value!" << endl; function2(a); cout << "End of example!" << endl; return 0;

Αποηέλεζμα Constructor! Constructor! Copy constructor, assignment operator, destructor! Copy constructor! Assignment operator! Destructor! Only one copy constructor this time! Copy constructor! Passing argument by value! Copy constructor! Created a local variable! Destructor! End of example! Destructor! Destructor! Destructor!