Σπίτι Προσωπικά Οικονομικά Αρχή Προγραμματισμός με C ++ Για Dummies Εξάπλωση Sheet - dummies

Αρχή Προγραμματισμός με C ++ Για Dummies Εξάπλωση Sheet - dummies

Βίντεο: Week 1 2024

Βίντεο: Week 1 2024
Anonim

Από τον Stephen R. Davis

Η C ++ δεν είναι μια εύκολη γλώσσα προγραμματισμού για να κυριαρχήσει. Μόνο μέσω της εμπειρίας οι μυριάδες συνδυασμοί των συμβόλων αρχίζουν να φαίνονται φυσικά σε σας. Αυτό το Cheat Sheet, ωστόσο, σας δίνει κάποιες συμπαγείς συμβουλές για τη χαλάρωση αυτής της μετάβασης από C + + αρχάριος σε C ++ γκουρού: Μάθετε πώς να διαβάζετε πολύπλοκες εκφράσεις C ++. μάθετε πώς να αποφύγετε προβλήματα δείκτη. και να υπολογίσετε πώς και πότε να κάνετε βαθιά αντίγραφα.

Πώς να διαβάσετε μια σύνθετη έκφραση C ++

Η C ++ είναι γεμάτη από μικρά σύμβολα, καθένα από τα οποία προσθέτει την έννοια των εκφράσεων. Οι κανόνες της γραμματικής C ++ είναι τόσο ευέλικτοι ώστε αυτά τα σύμβολα μπορούν να συνδυαστούν σε σχεδόν αδιανόητα πολύπλοκους συνδυασμούς. Οι εκφράσεις στην απλούστερη γλώσσα Γ μπορούν να γίνουν τόσο αμβλύτες ώστε να υπήρχε ένας ετήσιος διαγωνισμός για το ποιος θα μπορούσε να γράψει το πιο σκοτεινό πρόγραμμα και ποιος θα μπορούσε να το καταλάβει.

Ποτέ δεν είναι καλή ιδέα να προσπαθήσετε να γράψετε περίπλοκο κώδικα, αλλά μερικές φορές θα τρέξετε σε εκφράσεις σε C ++ που είναι λίγο μπερδεμένες με την πρώτη ματιά. Χρησιμοποιήστε τα παρακάτω βήματα για να τα καταλάβετε:

  1. Ξεκινήστε με τις πιο ενσωματωμένες παρενθέσεις.

    Ξεκινήστε να αναζητάτε τις πιο εξωτερικές παρενθέσεις. Μέσα σε αυτά, αναζητήστε ενσωματωμένες παρενθέσεις. Επαναλάβετε τη διαδικασία έως ότου επεξεργαστείτε το δρόμο σας προς το βαθύτερο ζευγάρι παρενθέσεων. Ξεκινήστε πρώτα την αξιολόγηση αυτής της υποεκτέλεσης χρησιμοποιώντας τους ακόλουθους κανόνες. Αφού καταλάβετε αυτή την έκφραση, ανασηκώστε το επόμενο επίπεδο και επαναλάβετε τη διαδικασία.

  2. Μέσα στο ζεύγος παρενθέσεων, αξιολογήστε κάθε λειτουργία κατά σειρά προτεραιότητας.

    Η σειρά ταξινόμησης των χειριστών καθορίζεται από την προτεραιότητα του χειριστή που φαίνεται στον πίνακα. Ο προσανατολισμός έρχεται πριν από τον πολλαπλασιασμό, ο οποίος έρχεται πριν από την προσθήκη, οπότε το ακόλουθο προσθέτει 1 + 2 φορές την τιμή που υποδεικνύεται από το * ptr.

int i = 1 + 2 * * ptr;
Χειριστές κατά σειρά προτεραιότητας

Προτεραιότητα Χειριστής Σημασία
1 (9)> ++ (unary)
Αύξηση 3 Απόδοση
2 > 4
% (δυαδικό) Μείωση 4
Μορφή 5
+ (δυαδικό) Προσθήκη 5
- (δυαδικό) 6
! ! Λογική OR 7
=, * =,% =, που πηγαίνει ο άλλος τρόπος). Οι περισσότεροι χειριστές της ίδιας προτεραιότητας αξιολογούν από αριστερά προς τα δεξιά. Επομένως, τα παρακάτω προσθέτουν 1 έως 2 και προσθέτουν το αποτέλεσμα σε 3: int i = 1 + 2 + 3;
Η σειρά αξιολόγησης ορισμένων φορέων δεν έχει σημασία. Για παράδειγμα, η προσθήκη λειτουργεί το ίδιο από αριστερά προς τα δεξιά καθώς κάνει από δεξιά προς τα αριστερά. Η σειρά αξιολόγησης κάνει μεγάλη διαφορά για ορισμένες λειτουργίες όπως η διαίρεση. Τα παρακάτω διαιρούνται 8 με 4 και διαιρούν το αποτέλεσμα κατά 2: int i = 8/4/2; Η κύρια εξαίρεση σε αυτόν τον κανόνα είναι η εκχώρηση, η οποία αξιολογείται από δεξιά προς τα αριστερά:
a = b = c; Αυτό αποδίδει c στο b και το αποτέλεσμα σε a. Αξιολογήστε τις υποεκφράσεις σε καμία συγκεκριμένη σειρά.
Εξετάστε την ακόλουθη έκφραση: int i = f () + g () * h (); Πολλαπλασιασμός έχει υψηλότερη προτεραιότητα, οπότε ίσως να υποθέσουμε ότι η συναρτήσεις g () και η () καλούνται πριν f (), όμως, αυτό δεν συμβαίνει. Η κλήση λειτουργίας έχει την υψηλότερη προτεραιότητα από όλες, έτσι ώστε να καλούνται και οι τρεις λειτουργίες πριν από τον πολλαπλασιασμό ή την προσθήκη. (Τα αποτελέσματα που επιστρέφονται από g () και h () πολλαπλασιάζονται και στη συνέχεια προστίθεται στα αποτελέσματα που επιστρέφονται από f ().)
Η μόνη φορά ότι η σειρά ότι οι λειτουργίες ονομάζονται κάνει μια διαφορά είναι όταν η συνάρτηση έχει παρενέργειες όπως το άνοιγμα ενός αρχείου ή την αλλαγή της τιμής μιας παγκόσμιας μεταβλητής. Δεν πρέπει σίγουρα να γράψετε τα προγράμματά σας έτσι ώστε να εξαρτώνται από αυτούς τους τύπους παρενεργειών. Εκτελείτε τυχόν μετατροπές τύπου μόνο όταν είναι απαραίτητο. Δεν πρέπει να κάνετε περισσότερες μετατροπές τύπου από το απολύτως απαραίτητο. Για παράδειγμα, η ακόλουθη έκφραση έχει τουλάχιστον τρεις και πιθανώς τέσσερις μετατροπές τύπου:
  1. float f = 'a' + 1;

    Ο χαρακτήρας 'a' πρέπει να προωθηθεί σε ένα int για να εκτελέσει την προσθήκη. Το int στη συνέχεια μετατρέπεται σε διπλό και στη συνέχεια μετατρέπεται σε ένα ενιαίο πλωτήρα ακριβείας. Θυμηθείτε ότι όλες οι αριθμητικές εκτελούνται είτε σε int είτε σε διπλό. Γενικά, θα πρέπει να αποφεύγετε την αριθμητική εκτέλεση των τύπων χαρακτήρων και να αποφύγετε εντελώς το πλωτήρα με ακρίβεια.

    5 τρόποι για να αποφύγετε Δείκτης Προβλήματα σε C ++
    

    Στην C ++, μια

    δείκτη
    

    είναι μια μεταβλητή που περιέχει τη διεύθυνση ενός αντικειμένου στην εσωτερική μνήμη του υπολογιστή. Χρησιμοποιήστε αυτά τα βήματα για να αποφύγετε προβλήματα με δείκτες C ++:

    Αρχικοποιήστε δείκτες όταν δηλώνονται.
    

    Μην αφήνετε ποτέ μεταβλητές δείκτη αρχικοποιηθεί - τα πράγματα δεν θα είναι και τόσο άσχημα αν δεν έχει προετοιμαστεί δείκτες που περιέχονται πάντα τυχαίες τιμές - η συντριπτική πλειοψηφία των τυχαίων τιμών είναι παράνομες τιμές δείκτη και θα προκαλέσει το πρόγραμμα για την συντριβή από τη στιγμή που χρησιμοποιούνται. Το πρόβλημα είναι ότι οι πρωτότυπες μεταβλητές τείνουν να παίρνουν την αξία άλλων μεταβλητών δείκτη που χρησιμοποιήθηκαν στο παρελθόν. Αυτά τα προβλήματα είναι πολύ δύσκολο να διορθωθούν.

  2. Αν δεν ξέρετε τι άλλο να αρχικοποιήσετε ένα δείκτη, αρχικοποιήστε το σε nullptr. Το nullptr είναι εγγυημένο ότι είναι παράνομη.

    Μηδενικοί δείκτες μετά τη χρήση τους.

    Ομοίως, πάντα μηδενική μεταβλητή δείκτη όταν ο δείκτης δεν είναι πλέον έγκυρος, εκχωρώντας την τιμή nullptr. Αυτό ισχύει ιδιαίτερα όταν επιστρέφετε ένα μπλοκ μνήμης στο σωρό χρησιμοποιώντας τη διαγραφή. μηδενίστε πάντα το δείκτη μετά την επιστροφή της μνήμης σωρού.
    

    Αντιστοίχουμε τη μνήμη από το σωρό και την επιστρέψουμε στο σωρό στο ίδιο "επίπεδο" για να αποφύγουμε διαρροές μνήμης.

    Πάντα προσπαθήστε να επιστρέψετε ένα μπλοκ μνήμης στο σωρό στο ίδιο επίπεδο αφαίρεσης όπως το έχετε κατανείμει. Αυτό γενικά σημαίνει ότι προσπαθείτε να διαγράψετε τη μνήμη στο ίδιο επίπεδο κλήσεων λειτουργίας.

  3. Πιάστε μια εξαίρεση για να διαγράψετε τη μνήμη όταν είναι απαραίτητο.

    Μην ξεχνάτε ότι μια εξαίρεση μπορεί να συμβεί σχεδόν ανά πάσα στιγμή. Αν σκοπεύετε να πιάσει την εξαίρεση και να συνεχίσει να λειτουργεί (σε αντίθεση με αφήσει τη συντριβή του προγράμματος), βεβαιωθείτε ότι έχετε πιάσει την εξαίρεση και να επιστρέψει τυχόν μπλοκ μνήμης στο σωρό πριν από τους δείκτες που δείχνουν τους να βγουν έξω από το πεδίο εφαρμογής και η μνήμη είναι χαμένος.

    Βεβαιωθείτε ότι οι τύποι ταιριάζουν ακριβώς.
    

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

void fn (int * p); άκυρη myFunc () {char c = 'a'; char * pC = & c. fn ((int *) PC)?}

Η παραπάνω λειτουργία συγκεντρώνει χωρίς καταγγελία εφόσον ο υπολογιστής δείκτης χαρακτήρας έχει αναδιατυπωθεί σε int * για να ταιριάζει με τη δήλωση fn (int *)? Ωστόσο, αυτό το πρόγραμμα σχεδόν δεν θα λειτουργήσει. Η συνάρτηση fn () περιμένει έναν δείκτη σε έναν πλήρη ακέραιο 32-bit και όχι κάποιο rinky-dink 8 bit char. Αυτοί οι τύποι προβλημάτων είναι πολύ δύσκολο να επιλυθούν. Πώς και πότε να κάνετε Deep Copies σε C ++ Οι κλάσεις που κατανέμουν τους πόρους στον κατασκευαστή τους πρέπει κανονικά να περιλαμβάνουν έναν κατασκευαστή αντιγράφων για να δημιουργήσουν αντίγραφα αυτών των πόρων. Διαθέτοντας ένα νέο μπλοκ της μνήμης και την αντιγραφή του περιεχομένου της αρχικής σε αυτό το νέο μπλοκ που είναι γνωστό ως δημιουργία ενός

  1. βαθιά αντίγραφο

    (σε αντίθεση με το προεπιλεγμένο ρηχό αντίγραφο). Χρησιμοποιήστε τα παρακάτω βήματα για να καθορίσετε τον τρόπο και τον χρόνο δημιουργίας βαθιών αντιγράφων στην C ++:

    Πάντα να δημιουργείτε ένα βαθύ αντίγραφο αν ο κατασκευαστής διαθέτει πόρους.

  2. Από προεπιλογή, η C ++ δημιουργεί τα λεγόμενα "ρηχά" αντίγραφα μελών των αντικειμένων κατά τη μετάβασή τους σε λειτουργίες ή ως αποτέλεσμα μιας ανάθεσης. Πρέπει να αντικαταστήσετε τους προεπιλεγμένους χειριστές αβαθούς αντιγράφου με το αντίγραφο βαθιάς αντιγραφής τους για κάθε κλάση που διαθέτει πόρους στον κατασκευαστή. Ο συνηθέστερος πόρος που παίρνει διατεθεί είναι η μνήμη σωρού που επιστρέφεται από τον νέο χειριστή.

    Να συμπεριλαμβάνεται πάντα ένας καταστροφικός παράγοντας για μια τάξη που διαθέτει πόρους.

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

    Πάντα να δηλώνετε τον καταστροφικό εικονικό.

  4. Ένα κοινό σφάλμα αρχαρίων είναι να ξεχάσετε να δηλώσετε τον καταστροφικό σας εικονικό. Το πρόγραμμα θα τρέξει καλά μέχρι κάποιος ανυποψίαστος προγραμματιστής έρχεται και κληρονομεί από την τάξη σας. Το πρόγραμμα εξακολουθεί να λειτουργεί, αλλά επειδή ο καταστροφέας στην κλάση βάσης μπορεί να μην χρησιμοποιηθεί σωστά, η μνήμη διαρρέει από το πρόγραμμά σας σαν κόσκινο μέχρι να καταρρεύσει τελικά. Αυτό το πρόβλημα είναι δύσκολο να βρεθεί.

    Να περιλαμβάνεται πάντα ένας κατασκευαστής αντιγράφων για μια τάξη που διαθέτει πόρους.

  5. Ο κατασκευαστής αντιγράφων δημιουργεί ένα σωστό αντίγραφο του τρέχοντος αντικειμένου, εκχωρώντας μνήμη από τον σωρό και αντιγράφοντας τα περιεχόμενα του αντικειμένου προέλευσης.

    Πάντα να αντικαταστήσετε τον τελεστή εκχώρησης για μια τάξη που διαθέτει πόρους.

Οι προγραμματιστές πρέπει να αποθαρρύνονται από τους υπερισχύοντες φορείς εκμετάλλευσης, αλλά ο διαχειριστής της ανάθεσης είναι μια εξαίρεση. Πρέπει να αντικαταστήσετε τον τελεστή εκχώρησης για οποιαδήποτε κλάση που διαθέτει πόρους στον κατασκευαστή.

Ο χειριστής εκχώρησης πρέπει να κάνει τρία πράγματα:

Βεβαιωθείτε ότι το αριστερό και δεξί αντικείμενο δεν είναι το ίδιο αντικείμενο. Με άλλα λόγια, βεβαιωθείτε ότι ο προγραμματιστής εφαρμογών δεν έγραψε κάτι σαν (a = a). Αν είναι, μην κάνετε τίποτα.

Χρησιμοποιήστε τον ίδιο κώδικα με τον καταστροφέα στο αριστερό αντικείμενο για να επιστρέψετε τους πόρους του. Καλέστε τον ίδιο κώδικα με έναν κατασκευαστή αντιγράφων για να δημιουργήσετε ένα βαθύ αντίγραφο του αντικειμένου του δεξιού χεριού στο αριστερό αντικείμενο. Αν δεν μπορείτε να το κάνετε αυτό, διαγράψτε τον κατασκευαστή αντιγράφων και τον τελεστή εκχώρησης έτσι ώστε το πρόγραμμα να μην μπορεί να δημιουργήσει αντίγραφα του αντικειμένου σας.

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

Αρχή Προγραμματισμός με C ++ Για Dummies Εξάπλωση Sheet - dummies

Η επιλογή των συντακτών

Πώς να αλλάξετε τη ρύθμιση ισορροπίας λευκού σε ετικέτες Canon EOS 70D

Πώς να αλλάξετε τη ρύθμιση ισορροπίας λευκού σε ετικέτες Canon EOS 70D

Χρησιμοποιώντας το Ο έλεγχος εξισορρόπησης λευκού στο Canon EOS 70D σας μπορεί εύκολα και γρήγορα να διορθώσει προβλήματα χρώματος. Οι διαθέσιμες ρυθμίσεις ισορροπίας λευκού απεικονίζονται με τα σύμβολα που εμφανίζονται στον παρακάτω πίνακα. Μπορείτε να δείτε την τρέχουσα ρύθμιση στην οθόνη Ρυθμίσεις λήψης, όπως φαίνεται στο παρακάτω σχήμα. Για να προσαρμόσετε τη ρύθμιση, έχετε ...

Η επιλογή των συντακτών

Προετοιμασία αντιγράφου TIFF ψηφιακής εικόνας για δημοσίευση - ανδρεικέλες

Προετοιμασία αντιγράφου TIFF ψηφιακής εικόνας για δημοσίευση - ανδρεικέλες

Μπορείτε να δημιουργήσετε αντίγραφο TIFF ψηφιακής εικόνας εύκολα. Για παράδειγμα, εάν θέλετε να υποβάλετε μια ψηφιακή φωτογραφία σε μια δημοσίευση εκτύπωσης, χρειάζεστε ένα αρχείο φωτογραφίας μορφής TIFF. Για να δημιουργήσετε ένα αντίγραφο TIFF ενός αρχείου σε ένα πρόγραμμα επεξεργασίας φωτογραφιών:

Εξάγοντας το περίγραμμα επιλογής του ψηφιακού σας επεξεργαστή εικόνας - ανδρείκελα

Εξάγοντας το περίγραμμα επιλογής του ψηφιακού σας επεξεργαστή εικόνας - ανδρείκελα

Η πρώτη προσπάθεια. Αναμείνετε να βελτιώσετε το περίγραμμα επιλογής σας τουλάχιστον λίγο. Μπορείτε να βελτιώσετε το περίγραμμα σας με διάφορους τρόπους: Αντίστροφη περιγράμματος επιλογής: Απλά χρησιμοποιήστε την εντολή Invert (ή την αντίστοιχη εντολή του προγράμματος). Προσθέστε σε περίγραμμα επιλογής: ...

Επιλογή από τις άκρες της ψηφιακής εικόνας - ανδρείκελα

Επιλογή από τις άκρες της ψηφιακής εικόνας - ανδρείκελα

Όπου οι φωτεινές περιοχές πληρούν τις σκοτεινές περιοχές. Πολλά προγράμματα επεξεργασίας φωτογραφιών σας επιτρέπουν να σχεδιάσετε ένα περίγραμμα επιλογής κατά μήκος ενός άκρου. Το εργαλείο αναζητά άκρες κοντά στο σημείο που σύρετε το ποντίκι.

Η επιλογή των συντακτών

Πώς να χρησιμοποιείτε το παράθυρο μητρώου του QuickBooks 2010 - dummies

Πώς να χρησιμοποιείτε το παράθυρο μητρώου του QuickBooks 2010 - dummies

Για να εργαστείτε ευκολότερα με το παράθυρο του Μητρώου και να ελέγξετε τον τρόπο εμφάνισής του: Το κουμπί Μετάβαση: Εμφανίζει το παράθυρο διαλόγου Μετάβαση (Go To). Αυτό το παράθυρο διαλόγου σάς επιτρέπει να αναζητήσετε μια συναλλαγή στο παράθυρο "Εγγραφή". Για παράδειγμα, μπορείτε να αναζητήσετε ...

Πώς να εργάζεστε με έναν υπάρχοντα προϋπολογισμό σε QuickBooks - dummies

Πώς να εργάζεστε με έναν υπάρχοντα προϋπολογισμό σε QuickBooks - dummies

Σε μεγάλες εταιρείες με εκατοντάδες ή χιλιάδες εργαζόμενοι, δύο ή τρία άτομα δαπανούν μεγάλο μέρος ή και ολόκληρο το χρόνο εργασίας τους με τα στοιχεία που έχουν εγγραφεί στον προϋπολογισμό. Για να επεξεργαστείτε έναν υπάρχοντα προϋπολογισμό στο QuickBooks, ακολουθήστε τα παρακάτω βήματα:

Πώς να χρησιμοποιείτε τα κουτιά παραθύρων αναφορών του QuickBooks - dummies

Πώς να χρησιμοποιείτε τα κουτιά παραθύρων αναφορών του QuickBooks - dummies

Από, Προς, Στήλες και Ταξινόμηση. Αυτά τα πλαίσια σας επιτρέπουν επίσης να ελέγχετε τις πληροφορίες που εμφανίζονται στο παράθυρο αναφοράς και την εμφάνιση των πληροφοριών. Για παράδειγμα, μπορείτε να ενημερώσετε το QuickBooks για το χρονικό διάστημα που θέλετε ...