Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να χρησιμοποιήσετε το Copy Κατασκευαστές σε C + +

A κατασκευαστή αντιγράφου είναι μια ειδική συνάρτηση μέλους μέσα σε μια τάξη . Δέχεται μια αναφορά σε ένα υπάρχον αντικείμενο του ίδιου τύπου κατηγορίας και κάνει μια βαθιά αντίγραφο του εν λόγω αντικειμένου. Μια βαθιά αντίγραφο όχι μόνο αντιγράφει όλα τα πεδία μελών, αλλά επίσης αντίγραφα τυχόν δυναμικά εκχωρημένη μνήμη . C + + compilers αντιγράφετε κατασκευή αυτόματα . Θα πρέπει να ορίσετε ένα κατασκευαστή αντίγραφο, όταν τάξη σας περιλαμβάνει δυναμική μνήμη . Τα πράγματα που θα χρειαστείτε Κατάλογος τίτλων C + + γνώση
C + + compiler , όπως το Visual Studio 2008
Η Εμφάνιση Περισσότερες οδηγίες
Η 1

Αξιολόγηση πότε πρέπει να καλέσετε έναν κατασκευαστή αντιγράφου . Υπάρχουν τρεις περιπτώσεις : . Κατά τη δημιουργία ενός αντικειμένου από ένα υπάρχον αντικείμενο του ίδιου τύπου , όταν περάσει ένα αντικείμενο με αξία σε μια λειτουργία και όταν μια συνάρτηση επιστρέφει ένα αντικείμενο 2

ξέρετε όταν σας C + + τάξη χρειάζεται ένα κατασκευαστή αντιγράφου . Βράζει κάτω σε αυτό . Εάν τάξη σας έχει δείκτες και εκτελεί δυναμική κατανομή μνήμης , τότε θα πρέπει να δώσει μια σαφή κατασκευαστή αντιγράφου .
Εικόνων 3

Κοιτάξτε ένα παράδειγμα όπου δεν έχετε να καθορίσει ένα κατασκευαστή για ένα C + + class . Κατηγορία X έχει στοίβα μόνο μεταβλητές και καθόλου δείκτες . Μια ρηχή αντίγραφο είναι επαρκής για να αντιγράψετε τις τιμές ενός υπάρχοντος αντικειμένου σε ένα νέο αντικείμενο . Ο compiler μπορεί να το κάνει αυτό αυτόματα , έτσι ώστε να μην χρειάζεται να ορίσετε ένα κατασκευαστή αντιγράφου για την κλάση X :
κατηγορία X { int num
?
Κοινό:
X ( ) : num ( 0 ) { }
~ X ( ) ? }
?
εικόνων 4

Μελέτη ένα παράδειγμα που απαιτεί σαφή ορισμό copy- κατασκευαστή . Όπως μπορείτε να δείτε , το μέγεθος του string, Ν , δεν είναι ένα σκληρό κώδικα τιμής , αλλά καθορίζεται από το χρήστη . Για να δημιουργήσετε Β από το Α ως στην έκφραση "ΚΗ ( A ) , " θα πρέπει να πει ο compiler πόση μνήμη πρέπει να διαθέσετε για το Β. Το μέρος για να γίνει αυτό είναι στην κατασκευαστή αντιγράφου , ως εξής :
κατηγορία Ζ {
int N ?
char * str ?
δημόσια :
Z ( int n ) : N (n ) {
str = νέα char [ Ν]?
}
Z ( Z & άλλα ) {
str = νέα char [ other.GetLen ( ) ] ?
//αντιγραφή δεδομένων από την οδό των "λοιπών" στην οδό της "αυτό"
}
~ Z ( ) {
delete [ ] str ?
}
int GetLen ( ) const {
επιστρέψει Ν ?
} }
?
Η

εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα