User Tools

Site Tools


cpp:classes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:classes [2021/05/06 23:56] – [Κλάσεις και Αντικείμενα] gthanoscpp:classes [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 61: Line 61:
 </code> </code>
  
-Ο λόγος που διακρίνουμε μία κλάση σε δήλωση και υλοποίηση είναι ότι η δήλωση της κλάσης πιθανόν να συμπεριληφθεί μέσω μιας εντολής ''#include'' από περισσότερα του ενός αρχεία στο ίδιο πρόγραμμα. Η υλοποίηση όμως δεν θέλουμε να συμπεριληφθεί σε περισσότερα του ενός μεταγλωττισμένα αρχεία, διότι ο linker στη συνέχεια θα διαμαρτύρεται ότι η ίδια συνάρτηση υπάρχει περισσότερες από μία φορές μέσα στο πρόγραμμα. Επιπλέον, δεν είναι καλή πρακτική στον αντικειμενοστραφή προγραμματισμό να αποκαλύπτουμε στον προγραμματιστή-χρήστη της κλάσης της εσωτερική υλοποίηση της. Έτσι, μπορούμε να διατηρήσουμε "κρυφή" την υλοποίηση των μεθόδων σε ξεχωριστό αρχείο από τη δήλωση της κλάσης.+Ο λόγος που διακρίνουμε μία κλάση σε δήλωση και υλοποίηση είναι ότι η δήλωση της κλάσης πιθανόν να συμπεριληφθεί μέσω μιας εντολής ''#include'' από περισσότερα του ενός αρχεία στο ίδιο πρόγραμμα. Η υλοποίηση όμως δεν θέλουμε να συμπεριληφθεί σε περισσότερα του ενός μεταγλωττισμένα αρχεία, διότι ο linker στη συνέχεια θα διαμαρτύρεται ότι η ίδια συνάρτηση υπάρχει περισσότερες από μία φορές μέσα στο τελικό πρόγραμμα. Επιπλέον, δεν είναι καλή πρακτική στον αντικειμενοστραφή προγραμματισμό να αποκαλύπτουμε στον προγραμματιστή-χρήστη της κλάσης της εσωτερική υλοποίηση της. Έτσι, μπορούμε να διατηρήσουμε "κρυφή" την υλοποίηση των μεθόδων σε ξεχωριστό αρχείο από τη δήλωση της κλάσης.
  
 <WRAP important 80% center round> <WRAP important 80% center round>
Line 96: Line 96:
 </code> </code>
  
-Οι δύο παραπάνω τρόποι ορισμού μιας μεθόδου της κλάσης είναι ισοδύναμοι με την διαφορά ότι η μέθοδος //setHeight// ορίζεται ως //inline// ακόμη και εάν η λέξη //inline// δεν αναφέρεται ρητά. Ο λόγος που η //setHeight// γίνεται //inline// είναι για να αποφευχθεί το πρόβλημα των περισσότερων του ενός ορισμών της ίδιας μεθόδου σε επιμέρους μεταγλωττισμένα αρχεία του ιδίου προγράμματος. Ο //compiler// προλαμβάνει το συγκεκριμένο πρόβλημα κάνοντας την μέθοδο //inline//.+Οι δύο παραπάνω τρόποι ορισμού μιας μεθόδου της κλάσης είναι ισοδύναμοι με την διαφορά ότι η μέθοδος //setHeight// ορίζεται ως //inline// ακόμη και εάν η λέξη //inline// δεν αναφέρεται ρητά. Ο λόγος που η //setHeight// γίνεται //inline// είναι για να αποφευχθεί το πρόβλημα των περισσότερων του ενός ορισμών της ίδιας μεθόδου σε επιμέρους μεταγλωττισμένα αρχεία του ιδίου προγράμματος, μέσω της συμπερίληψης (#include) του αρχείου .hpp από περισσότερα του ενός αρχεία .cpp στο ίδιο πρόγραμμα. Ο //compiler// προλαμβάνει το συγκεκριμένο πρόβλημα κάνοντας την μέθοδο //inline//.
  
 Για τον ορισμό της μεθόδου //setWidth// εκτός της κλάσης είναι απαραίτητη η χρήση του ονόματος της κλάσης ακολουθούμενη από το //scope operator// **Rectangle::**setWidth(int w). Η χρήση του //scope operator// εξασφαλίζει ότι η μέθοδος ανήκει στην κλάση και δεν αποτελεί αυτόνομη συνάρτηση του προγράμματος. Για τον ορισμό της μεθόδου //setWidth// εκτός της κλάσης είναι απαραίτητη η χρήση του ονόματος της κλάσης ακολουθούμενη από το //scope operator// **Rectangle::**setWidth(int w). Η χρήση του //scope operator// εξασφαλίζει ότι η μέθοδος ανήκει στην κλάση και δεν αποτελεί αυτόνομη συνάρτηση του προγράμματος.
cpp/classes.1620345406.txt.gz · Last modified: 2021/05/06 22:56 (external edit)