Γλώσσα Προγραμματισμού C++ Εισαγωγή - Μια πρώτη ματιά
Βασικά χαρακτηριστικά αναπτύχθηκε ως επέκταση της C το 1979 υπερσύνολο της C γλώσσα γενικού σκοπού, γρήγορη, Αντικειμενοστραφής προγραμματισμός (Object Oriented Programming) 3η πιο δημοφιλής γλώσσα προγραμματισμού* *TIOBE Index for October 2016
IDE s για C++
Το πρώτο μας πρόγραμμα #include <iostream> int main() { std::cout << "Hello world!"; return 0; }
Αναλύοντας το πρώτο μας πρόγραμμα 1. Οδηγία προεπεξεργαστή (preprocessor directive) 2. Δήλωση της συνάρτησης main() 3. Πρόταση εξόδου (output statement) 4. std::cout είναι ένα αντικείμενο της C++ που αναπαριστά την κονσόλα 5. Το σύμβολο << symbol είναι ένας τελεστής (operator) 6. Πρόταση επιστροφής (return statement)
Συντακτικά λάθη Οι προτάσεις σε μια γλώσσα προγραμματισμού γράφονται με μια συγκεκριμένη σύνταξη Ο μεταγλωττιστής (compiler) ελέγχει ένα πρόγραμμα για συντακτικά λάθη Αν παραβιαστεί κάποιος συντακτικός κανόνας ο compiler αναφέρει το λάθος και δεν ολοκληρώνεται η μεταγλώττιση Τα συντακτικά λάθη είναι κοινά και σχετικά εύκολο να εντοπιστούν
Σχόλια (comments) Κείμενο που μπαίνει στον κώδικα για να εξηγήσει ή σχολιάσει τον κώδικά μας Αγνοούνται από τον μεταγλωτιστή Σχόλια μιας γραμμής και πολλαπλών γραμμών
Σχόλια (comments) Σχόλια μιας γραμμής (single line) με το σύμβολο // // cout and endl live in the iostream library std::cout << "Hello world!" << std::endl; Σχόλια πολλαπλών γραμμών (multiline) /* */ /* This is a multi-line comment. This line will be ignored. So will this one. */
Σχολιασμός κώδικα Μπορούμε να σχολιάσουμε και γραμμές κώδικά χρήσιμο για την εκσφαλμάτωση (debugging) Παράδειγμα: calculatesum(n); //storedata(); printresults();
Μεταβλητές x = 5; Τι ακριβώς είναι το x?
Μεταβλητές μια μεταβλητή είναι ένα όνομα που αντιστοιχεί σε μια θέση μνήμης όταν ορίζουμε μια μεταβλητή δεσμεύουμε μια θέση μνήμης στη RAM για να ορίσουμε μια μεταβλητή πρέπει να τη δηλώσουμε
Δήλωση μεταβλητής int x; Δηλώνει μια μεταβλητή τύπου int με όνομα x
Εκχώρηση τιμών (assignments) int y; y = 4; // όρισε y ως ακέραια μεταβλητή // το 4 εκχωρείται στο y y = 2 + 5; // 2 + 5 υπολογίζεται σε 7, το οποίο εκχωρείται στο y int x; // όρισε x ως ακέραια μεταβλητή x = y; // y ισούται με 7 (από πριν), το οποίο εκχωρείται στο x. x = x; // x ισούται to 7, το οποίο εκχωρείται στο x (άχρηστο!) x = x + 1; // x + 1 υπολογίζεται σε 8, το οποίο εκχωρείται στο x.
Αρχικοποίηση μεταβλητών (initialization) Αφού δηλώσουμε μια μεταβλητή μπορούμε τις δώσουμε μια αρχική τιμή int x; // δήλωση μεταβλητής x = 5; // εκχώρηση της τιμής 5 στη μεταβλητή x Μπορούμε να κάνουμε και τα δυο ταυτόχρονα σε μια πρόταση int x = 5; // δήλωση και αρχικοποίηση της μεταβλητής x με την τιμή 5
Μη αρχικοποιημένες μεταβλητές Αν το πρόγραμμα μας δεν αρχικοποιήσει μια μεταβλητή τότε η τιμή της είναι απροσδιόριστη (undefined) και οδηγεί σε λανθασμένα αποτελέσματα. Κάποιοι compilers μπορεί να δώσουνε τιμή 0 σε μια μη αρχικοποιημένη μεταβλητή αλλά δεν πρέπει να βασιζόμαστε σε αυτό int x; // print the value of x to the screen (dangerous, because x is uninitialized) std::cout << x;
Δραστηριότητα Τι τιμές θα τυπώσει το παρακάτω πρόγραμμα? int x = 5; x = x - 2; std::cout << x << std::endl; // #1 int y = x; std::cout << y << std::endl; // #2 // x + y is an r-value in this context, so evaluate their values std::cout << x + y << std::endl; // #3 std::cout << x << std::endl; // #4 int z; std::cout << z << std::endl; // #5
Αντικείμενο cout Το αντικείμενο std::cout (της βιβλιοθήκης iostream) χρησιμοποιείται για την έξοδο (εκτύπωση) κειμένου στη κονσόλα, μαζί με τον τελεστή εξόδου << #include <iostream> int main() { std::cout << "Hello world!"; return 0; }
Αντικείμενο cout Τι θα εκτυπώσει το παρακάτω πρόγραμμα? std::cout << "Hi!"; std::cout << "My name is Alex.";
Αντικείμενο cout Μπορούμε να εκτυπώσουμε περισσότερα στην ίδια γραμμή χρησιμοποιώντας τον τελεστή εξόδου ( << ) πολλαπλές φορές. int x = 4; std::cout << "x is equal to: " << x;
Συνάρτηση std::endl Αν θέλουμε να εκτυπώσουμε σε περισσότερες γραμμές χρησιμοποιούμε το std::endl (παρόμοιο με το χαρακτήρα αλλαγής γραμμής newline /n). std::cout << "Hi!" << std::endl; std::cout << "My name is Alex." << std::endl;
Αντικείμενο std::cin Το αντικείμενο std::cin (της βιβλιοθήκης iostream) χρησιμοποιείται για την είσοδο δεδομένων από τον χρήστη, μαζί με τον τελεστή εισόδου >>. (Το αντίθετο του cout). std::cout << "Enter a number: "; // ζητάμε έναν αριθμό από τον χρήστη int x; // δεν χρειάζεται αρχικοποίηση, θα δώσουμε τιμή αμέσως μετά std::cin >> x; // διάβασε αριθμό από την κονσόλα και αποθήκευσε τον στη x std::cout << "You entered " << x << std::endl; return 0;
std::cin, std::cout, <<, and >> std::cin and cout πάντα βρίσκονται στο αριστερό μέρος της πρότασης εκχώρησης. std::cout χρησιμοποιείται γιε έξοδο τιμών (console output) std::cin χρησιμοποιείται για είσοδο τιμών (cin = console input) << χρησιμοποιείται με std::cout, και δείχνει την κατεύθυνση των δεδομένων std::cout << 4 μετακινεί την τιμή 4 στη κονσόλα >> χρησιμοποιείται με std::cin, και δείχνει την κατεύθυνση των δεδομένων std::cin >> x μετακινεί την τιμή από την κονσόλα στη μεταβλητή
Το όνομα χώρου (namespace) Οτιδήποτε μέσα στη standard library της C++ όριζεται μέσα στο όνομα χώρου std Αντίστοιχα κάθε βιβλιοθήκη έχει το δικό της όνομα χώρου Αυτό γίνεται έτσι ώστε ένα αντικειμένο ή συνάρτηση σε μια βλιοθήλη να μπορούν να έχουν το ίδιο όνομα Αλλά να ξεχωρίζουν από το όνομα χώρου (namespace)
Το όνομα χώρου (namespace) Έχουμε δύο βιβλιοθήκες lib1 και lib2 που έχουν μια συνάρτηση average() με το ίδιο όνομα lib1::average(); lib2::average();
Συναρτήσεις (functions) μια επαναχρησιμοποιήσιμη ακολουθία εντολών σχεδιασμένη να κάνει μια συγκεκριμένη δουλειά κάθε πρόγραμμα C/C++ πρέπει να έχει μια κύρια συνάρτηση ( main() ) από την main() ξεκινά η εκτέλεση του προγράμματος
Συναρτήσεις (functions) void processinput() {. } void update() {. } void render() {. } int main() { while (true) { processinput(); update(); render(); } return 0; }
Συναρτήσεις (functions) - πλεονεκτήματα Η χρήση των συναρτήσεων διευκολύνει την ανάγνωση την σχεδίαση - ανάπτυξη την συντήρηση του προγράμματος την επέκταση ενός προγράμματος
Επιστρoφή τιμών (return values) οι συναρτήσεις επιστρέφουν μια τιμή στην κύρια συνάρτηση ο τύπος επιστροφής (return type) μπορεί να είναι οποιοδήποτε τύπος δεδομένων (π.χ. int, double) όταν δεν επιστρέφουμε τιμή ο τύπος επιστροφής είναι void
Επιστρoφή τιμών (return values) // δεν επιστρέφει τιμή void returnnothing() { std::cout << Hello void << std::endl; // prints } // int επιστρέφει την ακέραια τιμή 5 int return5() { return 5; }
Επιστροφή τιμών (return values) int main() { std::cout << return5() << std::endl; // εκτυπώνει 5 std::cout << return5() + 2 << std::endl; // εκτυπώνει 7 returnnothing(); // δεν επιστρέφεται τιμή return5(); // επιστρέφεται τιμή αλλά χάνεται //std::cout << returnnothing(); // Αυτή η εντολή βγάζει μήνυμα λάθους return 0; } Ερώτηση: Σε τι επιστρέφει η main την τιμή 0?
Ασκήσεις 1. Δημιουργήστε ένα project c++ στο IDE 2. Κάντε compile και εκτέλεση του προγράμματος 3. Σβήστε το ; σε μια εντολή και παρατηρήστε τα μηνύματα 4. Περιηγηθείτε στον φάκελο του project 5. Εκτυπώστε το ονοματεπώνυμο σας 6. Φτιάξτε το προηγούμενο με χρήση συνάρτησης printmyname() 7. Φτιάξτε ένα πρόγραμμα που να εκτυπώνει την ηλικία σας σε μέρες (με ακρίβεια έτους) 8. Το παραπάνω αλλά να διαβάζει την ηλικία από το πληκτρολόγιο 9. Το παραπάνω πρόγραμμα με χρήση συνάρτησης