c++/root Περιεχόμενα ...+/c++-root-slides... · 35 Μεταβλητή...

71
C++ / ROOT Ι. Παπαδόπουλος Περιεχόμενα Γραμμή εντολής Δείκτες προς συναρτήσεις Αναφορές l-value Πέρασμα ορισμάτων r-value Διαχείριση μνήμης Μνήμη stack και heap new, delete new[], delete[] C++ strings Αρχεία 1/23 Αντικειμενοστραφείς Γλώσσες Προγραμματισμού C++ / ROOT Ιωάννης Παπαδόπουλος Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων Νοέμβριος 2018

Upload: others

Post on 25-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

1/23

Αντικειμενοστραφείς Γλώσσες ΠρογραμματισμούC++ / ROOT

Ιωάννης Παπαδόπουλος

Τμήμα Φυσικής, Πανεπιστήμιο Ιωαννίνων

Νοέμβριος 2018

Page 2: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

2/23

Περιεχόμενα

Page 3: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

3/23

Περιεχόμενα

1 Γραμμή εντολής: παράμετροι και περιβάλλον

2 Δείκτες προς συναρτήσεις

3 Αναφορές (References)Αναφορές l-valueΠέρασμα ορισμάτων σε συναρτήσειςΑναφορές r-value

4 Διαχείριση μνήμηςΜνήμη stack και heapΤελεστές new και deleteΤελεστές new[] και delete[]

5 C++ strings

6 Αρχεία στη C++

Page 4: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

4/23

Γραμμή εντολής: παράμετροι και περιβάλλον

Page 5: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

5/23

Γραμμή εντολής: παράμετροι και περιβάλλον1 #include <iostream>2 using namespace std;34 int main (5 int argc,67 char *argv[],89 char *env[]1011 ) {1213 for (int i=0;i<argc;i++) {14 cout << "Όρισμα " << i << ": "15 << argv[i] << endl;16 }1718 int n=0;19 while (env[n]) {20 cout << "Μεταβλητή περιβάλλοντος " << n << ": "21 << env[n] << endl;22 n++;23 }2425 return 0;26 }2728 /* Παράδειγμα εκτέλεσης του προγράμματος29 Γραμμή εντολής: ./main_args a "x y z" ελληνικά...30 ---> Έξοδος στην οθόνη:31 Όρισμα 0: ./main_args32 Όρισμα 1: a33 Όρισμα 2: x y z34 Όρισμα 3: ελληνικά...35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-836 Μεταβλητή περιβάλλοντος 1: LANGUAGE=en_US:en37 */

Η συνάρτηση main μπορεί να λάβειορίσματα, που επιτρέπουν τηνανάγνωση παραμέτρων από τη γραμμήεντολής κατά την εκτέλεση ενόςπρογράμματος.

Δυνατές δηλώσεις της main:

int main();

int main( int argc, char* argv[] );

int main( int argc, char* argv[], char* env[] );

γρ. 5 Ο ακέραιος argc δίνει τον αριθμό παραμέτρωνπου παρέχονται κατά την εκτέλεση στη γραμμήεντολής (συμπεριλαμβανομένου και του ονόματοςτου εκτελέσιμου αρχείου).

γρ. 7 Ο argv είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με '\0'), πλήθουςargc. To argv[0] δίνει το όνομα τουεκτελέσιμου αρχείου. Tα argv[1] έωςargv[argc-1] δίνουν την αντίστοιχη παράμετροτης γραμμής εντολής.

γρ. 9 Ο env είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με '\0'), αγνώστουπλήθους, με τις όποιες μεταβλητέςπεριβάλλοντος εντός του οποίου εκτελείται τοπρόγραμμα.

Page 6: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

5/23

Γραμμή εντολής: παράμετροι και περιβάλλον1 #include <iostream>2 using namespace std;34 int main (5 int argc,67 char *argv[],89 char *env[]1011 ) {1213 for (int i=0;i<argc;i++) {14 cout << "Όρισμα " << i << ": "15 << argv[i] << endl;16 }1718 int n=0;19 while (env[n]) {20 cout << "Μεταβλητή περιβάλλοντος " << n << ": "21 << env[n] << endl;22 n++;23 }2425 return 0;26 }2728 /* Παράδειγμα εκτέλεσης του προγράμματος29 Γραμμή εντολής: ./main_args a "x y z" ελληνικά...30 ---> Έξοδος στην οθόνη:31 Όρισμα 0: ./main_args32 Όρισμα 1: a33 Όρισμα 2: x y z34 Όρισμα 3: ελληνικά...35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-836 Μεταβλητή περιβάλλοντος 1: LANGUAGE=en_US:en37 */

Η συνάρτηση main μπορεί να λάβειορίσματα, που επιτρέπουν τηνανάγνωση παραμέτρων από τη γραμμήεντολής κατά την εκτέλεση ενόςπρογράμματος.

γρ. 5 Ο ακέραιος argc δίνει τον αριθμόπαραμέτρων που παρέχονται κατά τηνεκτέλεση στη γραμμή εντολής(συμπεριλαμβανομένου και τουονόματος του εκτελέσιμου αρχείου).

γρ. 7 Ο argv είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), πλήθους argc. To argv[0]δίνει το όνομα του εκτελέσιμουαρχείου. Tα argv[1] έωςargv[argc-1] δίνουν την αντίστοιχηπαράμετρο της γραμμής εντολής.

γρ. 9 Ο env είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), αγνώστου πλήθους, με τιςόποιες μεταβλητές περιβάλλοντοςεντός του οποίου εκτελείται τοπρόγραμμα.

Page 7: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

5/23

Γραμμή εντολής: παράμετροι και περιβάλλον1 #include <iostream>2 using namespace std;34 int main (5 int argc,67 char *argv[],89 char *env[]1011 ) {1213 for (int i=0;i<argc;i++) {14 cout << "Όρισμα " << i << ": "15 << argv[i] << endl;16 }1718 int n=0;19 while (env[n]) {20 cout << "Μεταβλητή περιβάλλοντος " << n << ": "21 << env[n] << endl;22 n++;23 }2425 return 0;26 }2728 /* Παράδειγμα εκτέλεσης του προγράμματος29 Γραμμή εντολής: ./main_args a "x y z" ελληνικά...30 ---> Έξοδος στην οθόνη:31 Όρισμα 0: ./main_args32 Όρισμα 1: a33 Όρισμα 2: x y z34 Όρισμα 3: ελληνικά...35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-836 Μεταβλητή περιβάλλοντος 1: LANGUAGE=en_US:en37 */

Η συνάρτηση main μπορεί να λάβειορίσματα, που επιτρέπουν τηνανάγνωση παραμέτρων από τη γραμμήεντολής κατά την εκτέλεση ενόςπρογράμματος.

γρ. 5 Ο ακέραιος argc δίνει τον αριθμόπαραμέτρων που παρέχονται κατά τηνεκτέλεση στη γραμμή εντολής(συμπεριλαμβανομένου και τουονόματος του εκτελέσιμου αρχείου).

γρ. 7 Ο argv είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), πλήθους argc. To argv[0]δίνει το όνομα του εκτελέσιμουαρχείου. Tα argv[1] έωςargv[argc-1] δίνουν την αντίστοιχηπαράμετρο της γραμμής εντολής.

γρ. 9 Ο env είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), αγνώστου πλήθους, με τιςόποιες μεταβλητές περιβάλλοντοςεντός του οποίου εκτελείται τοπρόγραμμα.

Page 8: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

5/23

Γραμμή εντολής: παράμετροι και περιβάλλον1 #include <iostream>2 using namespace std;34 int main (5 int argc,67 char *argv[],89 char *env[]1011 ) {1213 for (int i=0;i<argc;i++) {14 cout << "Όρισμα " << i << ": "15 << argv[i] << endl;16 }1718 int n=0;19 while (env[n]) {20 cout << "Μεταβλητή περιβάλλοντος " << n << ": "21 << env[n] << endl;22 n++;23 }2425 return 0;26 }2728 /* Παράδειγμα εκτέλεσης του προγράμματος29 Γραμμή εντολής: ./main_args a "x y z" ελληνικά...30 ---> Έξοδος στην οθόνη:31 Όρισμα 0: ./main_args32 Όρισμα 1: a33 Όρισμα 2: x y z34 Όρισμα 3: ελληνικά...35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-836 Μεταβλητή περιβάλλοντος 1: LANGUAGE=en_US:en37 */

Η συνάρτηση main μπορεί να λάβειορίσματα, που επιτρέπουν τηνανάγνωση παραμέτρων από τη γραμμήεντολής κατά την εκτέλεση ενόςπρογράμματος.

γρ. 5 Ο ακέραιος argc δίνει τον αριθμόπαραμέτρων που παρέχονται κατά τηνεκτέλεση στη γραμμή εντολής(συμπεριλαμβανομένου και τουονόματος του εκτελέσιμου αρχείου).

γρ. 7 Ο argv είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), πλήθους argc. To argv[0]δίνει το όνομα του εκτελέσιμουαρχείου. Tα argv[1] έωςargv[argc-1] δίνουν την αντίστοιχηπαράμετρο της γραμμής εντολής.

γρ. 9 Ο env είναι ένας πίνακας C-strings(multi-byte, τερματιζόμενα με'\0'), αγνώστου πλήθους, με τιςόποιες μεταβλητές περιβάλλοντοςεντός του οποίου εκτελείται τοπρόγραμμα.

Page 9: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

6/23

Δείκτες προς συναρτήσεις

Page 10: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

7/23

Δείκτες προς συναρτήσεις1 #include <iostream>2 using namespace std;3 double sum( double pf(double) , int n ) {4 double s=0;5 for (int i=1; i<=n; i++) s+=pf(i);6 return s;7 }8 double square(double x) { return x*x; }9 double cube(double x) { return x*x*x; }1011 int main() {12 double (*pf1)(double)=square;13 double (*pf2)(double)=cube;14 cout << " &pf1 : " << &pf1 <<endl;15 cout << " *pf1 : " << (void*) *pf1 <<endl;16 cout << " pf1 : " << (void*) pf1 <<endl;17 cout << "&square : " << (void*) &square <<endl;18 cout << "*square : " << (void*) *square <<endl;19 cout << " square : " << (void*) square <<endl<<endl;2021 cout << " &pf2 : " << &pf2 <<endl;22 cout << " *pf2 : " << (void*) *pf2 <<endl;23 cout << " pf2 : " << (void*) pf2 <<endl;24 cout << " &cube : " << (void*) &cube <<endl;25 cout << " *cube : " << (void*) *cube <<endl;26 cout << " cube : " << (void*) cube <<endl<<endl;2728 cout << "όροι / 1²+2²+... / 1³+2³+..." << endl;29 for (int i=0;i<=10;i++) {30 cout << i << " " << sum(pf1,i)31 << " " << sum(pf2,i)32 << endl;33 }34 return 0;35 }

Μία συνάρτηση (έστω η func) ότανορίζεται μετατρέπεται αυτομάτως σεδείκτη, που δείχνει στη θέση μνήμηςόπου βρίσκεται ο κώδικάς της.Έτσι το όνομά της ταυτίζεται με τηδιεύθυνσή της αλλά και με τοπεριεχόμενο της διεύθυνσής της,δηλαδή: func ≡ &func ≡ *func

Μπορούμε να ορίσουμε δείκτες προςσυναρτήσεις, και να τους δώσουμε ωςτιμή μία συνάρτηση. Τότε ο δείκτης(έστω ο pf) θα δείχνει στησυνάρτηση και το ίδιο θα συμβαίνεικαι με την αποαναφοροποιημένη τουτιμή, δηλαδή: pf ≡ *pf

Στο διπλανό παράδειγμα, τυπώνονταιοι διάφορες διευθύνσεις για τηνκατάδειξη των παραπάνω.

Για ένα πιο σύνθετο παράδειγμαδείτε εδώ.

Page 11: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

7/23

Δείκτες προς συναρτήσεις1 #include <iostream>2 using namespace std;3 double sum( double pf(double) , int n ) {4 double s=0;5 for (int i=1; i<=n; i++) s+=pf(i);6 return s;7 }8 double square(double x) { return x*x; }9 double cube(double x) { return x*x*x; }1011 int main() {12 double (*pf1)(double)=square;13 double (*pf2)(double)=cube;14 cout << " &pf1 : " << &pf1 <<endl;15 cout << " *pf1 : " << (void*) *pf1 <<endl;16 cout << " pf1 : " << (void*) pf1 <<endl;17 cout << "&square : " << (void*) &square <<endl;18 cout << "*square : " << (void*) *square <<endl;19 cout << " square : " << (void*) square <<endl<<endl;2021 cout << " &pf2 : " << &pf2 <<endl;22 cout << " *pf2 : " << (void*) *pf2 <<endl;23 cout << " pf2 : " << (void*) pf2 <<endl;24 cout << " &cube : " << (void*) &cube <<endl;25 cout << " *cube : " << (void*) *cube <<endl;26 cout << " cube : " << (void*) cube <<endl<<endl;2728 cout << "όροι / 1²+2²+... / 1³+2³+..." << endl;29 for (int i=0;i<=10;i++) {30 cout << i << " " << sum(pf1,i)31 << " " << sum(pf2,i)32 << endl;33 }34 return 0;35 }

Μία συνάρτηση (έστω η func) ότανορίζεται μετατρέπεται αυτομάτως σεδείκτη, που δείχνει στη θέση μνήμηςόπου βρίσκεται ο κώδικάς της.Έτσι το όνομά της ταυτίζεται με τηδιεύθυνσή της αλλά και με τοπεριεχόμενο της διεύθυνσής της,δηλαδή: func ≡ &func ≡ *func

Μπορούμε να ορίσουμε δείκτες προςσυναρτήσεις, και να τους δώσουμε ωςτιμή μία συνάρτηση. Τότε ο δείκτης(έστω ο pf) θα δείχνει στησυνάρτηση και το ίδιο θα συμβαίνεικαι με την αποαναφοροποιημένη τουτιμή, δηλαδή: pf ≡ *pf

Στο διπλανό παράδειγμα, τυπώνονταιοι διάφορες διευθύνσεις για τηνκατάδειξη των παραπάνω.

Για ένα πιο σύνθετο παράδειγμαδείτε εδώ.

Page 12: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

7/23

Δείκτες προς συναρτήσεις1 #include <iostream>2 using namespace std;3 double sum( double pf(double) , int n ) {4 double s=0;5 for (int i=1; i<=n; i++) s+=pf(i);6 return s;7 }8 double square(double x) { return x*x; }9 double cube(double x) { return x*x*x; }1011 int main() {12 double (*pf1)(double)=square;13 double (*pf2)(double)=cube;14 cout << " &pf1 : " << &pf1 <<endl;15 cout << " *pf1 : " << (void*) *pf1 <<endl;16 cout << " pf1 : " << (void*) pf1 <<endl;17 cout << "&square : " << (void*) &square <<endl;18 cout << "*square : " << (void*) *square <<endl;19 cout << " square : " << (void*) square <<endl<<endl;2021 cout << " &pf2 : " << &pf2 <<endl;22 cout << " *pf2 : " << (void*) *pf2 <<endl;23 cout << " pf2 : " << (void*) pf2 <<endl;24 cout << " &cube : " << (void*) &cube <<endl;25 cout << " *cube : " << (void*) *cube <<endl;26 cout << " cube : " << (void*) cube <<endl<<endl;2728 cout << "όροι / 1²+2²+... / 1³+2³+..." << endl;29 for (int i=0;i<=10;i++) {30 cout << i << " " << sum(pf1,i)31 << " " << sum(pf2,i)32 << endl;33 }34 return 0;35 }

Μία συνάρτηση (έστω η func) ότανορίζεται μετατρέπεται αυτομάτως σεδείκτη, που δείχνει στη θέση μνήμηςόπου βρίσκεται ο κώδικάς της.Έτσι το όνομά της ταυτίζεται με τηδιεύθυνσή της αλλά και με τοπεριεχόμενο της διεύθυνσής της,δηλαδή: func ≡ &func ≡ *func

Μπορούμε να ορίσουμε δείκτες προςσυναρτήσεις, και να τους δώσουμε ωςτιμή μία συνάρτηση. Τότε ο δείκτης(έστω ο pf) θα δείχνει στησυνάρτηση και το ίδιο θα συμβαίνεικαι με την αποαναφοροποιημένη τουτιμή, δηλαδή: pf ≡ *pf

Στο διπλανό παράδειγμα, τυπώνονταιοι διάφορες διευθύνσεις για τηνκατάδειξη των παραπάνω.

Για ένα πιο σύνθετο παράδειγμαδείτε εδώ.

Page 13: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

8/23

Δείκτες προς συναρτήσεις1 /*2 &pf1 : 0x7ffceb71a6483 *pf1 : 0x563ab3796a5b4 pf1 : 0x563ab3796a5b5 &square : 0x563ab3796a5b6 *square : 0x563ab3796a5b7 square : 0x563ab3796a5b89 &pf2 : 0x7ffceb71a65010 *pf2 : 0x563ab3796a7011 pf2 : 0x563ab3796a7012 &cube : 0x563ab3796a7013 *cube : 0x563ab3796a7014 cube : 0x563ab3796a701516 όροι / 1²+2²+... / 1³+2³+...17 0 0 018 1 1 119 2 5 920 3 14 3621 4 30 10022 5 55 22523 6 91 44124 7 140 78425 8 204 129626 9 285 202527 10 385 302528 */

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

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

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

Ακολουθούν (γραμμές 16-28) τααποτελέσματα εκτέλεσης του βρόχουfor εντός του οποίου καλείται ησυνάρτηση sum, μία φορά με τησυνάρτηση square και μία με τησυνάρτηση cube.

Page 14: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

8/23

Δείκτες προς συναρτήσεις1 /*2 &pf1 : 0x7ffceb71a6483 *pf1 : 0x563ab3796a5b4 pf1 : 0x563ab3796a5b5 &square : 0x563ab3796a5b6 *square : 0x563ab3796a5b7 square : 0x563ab3796a5b89 &pf2 : 0x7ffceb71a65010 *pf2 : 0x563ab3796a7011 pf2 : 0x563ab3796a7012 &cube : 0x563ab3796a7013 *cube : 0x563ab3796a7014 cube : 0x563ab3796a701516 όροι / 1²+2²+... / 1³+2³+...17 0 0 018 1 1 119 2 5 920 3 14 3621 4 30 10022 5 55 22523 6 91 44124 7 140 78425 8 204 129626 9 285 202527 10 385 302528 */

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

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

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

Ακολουθούν (γραμμές 16-28) τααποτελέσματα εκτέλεσης του βρόχουfor εντός του οποίου καλείται ησυνάρτηση sum, μία φορά με τησυνάρτηση square και μία με τησυνάρτηση cube.

Page 15: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

8/23

Δείκτες προς συναρτήσεις1 /*2 &pf1 : 0x7ffceb71a6483 *pf1 : 0x563ab3796a5b4 pf1 : 0x563ab3796a5b5 &square : 0x563ab3796a5b6 *square : 0x563ab3796a5b7 square : 0x563ab3796a5b89 &pf2 : 0x7ffceb71a65010 *pf2 : 0x563ab3796a7011 pf2 : 0x563ab3796a7012 &cube : 0x563ab3796a7013 *cube : 0x563ab3796a7014 cube : 0x563ab3796a701516 όροι / 1²+2²+... / 1³+2³+...17 0 0 018 1 1 119 2 5 920 3 14 3621 4 30 10022 5 55 22523 6 91 44124 7 140 78425 8 204 129626 9 285 202527 10 385 302528 */

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

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

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

Ακολουθούν (γραμμές 16-28) τααποτελέσματα εκτέλεσης του βρόχουfor εντός του οποίου καλείται ησυνάρτηση sum, μία φορά με τησυνάρτηση square και μία με τησυνάρτηση cube.

Page 16: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

8/23

Δείκτες προς συναρτήσεις1 /*2 &pf1 : 0x7ffceb71a6483 *pf1 : 0x563ab3796a5b4 pf1 : 0x563ab3796a5b5 &square : 0x563ab3796a5b6 *square : 0x563ab3796a5b7 square : 0x563ab3796a5b89 &pf2 : 0x7ffceb71a65010 *pf2 : 0x563ab3796a7011 pf2 : 0x563ab3796a7012 &cube : 0x563ab3796a7013 *cube : 0x563ab3796a7014 cube : 0x563ab3796a701516 όροι / 1²+2²+... / 1³+2³+...17 0 0 018 1 1 119 2 5 920 3 14 3621 4 30 10022 5 55 22523 6 91 44124 7 140 78425 8 204 129626 9 285 202527 10 385 302528 */

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

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

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

Ακολουθούν (γραμμές 16-28) τααποτελέσματα εκτέλεσης του βρόχουfor εντός του οποίου καλείται ησυνάρτηση sum, μία φορά με τησυνάρτηση square και μία με τησυνάρτηση cube.

Page 17: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

9/23

Αναφορές (References)

Page 18: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.

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

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 19: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.

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

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 20: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.

Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 21: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.

Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 22: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 23: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 24: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 25: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 26: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

10/23

Αναφορές l-value (l-value references)

Οι αναφορές l-value είναι συνώνυμα (aliases) μεταβλητών, δηλαδή μπορούννα χρησιμοποιηθούν για πρόσβαση με άλλο όνομα στη μεταβλητή.Μεταβολή της τιμής μίας αναφοράς σημαίνειμεταβολή της τιμής της αρχικής μεταβλητής στην οποία αναφέρεται.Οι αναφορές πρέπει να αρχικοποιούνται.Όσο υφίσταται, μία αναφορά συνδέεται με την ίδια πάντα μεταβλητή.Μοιάζουν με τους δείκτες, όμως δεν απαιτούν αποαναφοροποίηση όπως αυτοί.

int i = 100 ; // το i έχει τιμή 100int &ri = i ;

ri = 3 ; // το i έχει τιμή 3

int i = 100 ;int &ri ; // σφάλμα

double d = 2.5 ;int &ri = d ; // σφάλμα

int &ri = 33 ; // σφάλμα

Οι αναφορές l-valueδηλώνονται μέσω του τελεστή &πριν το αναγνωριστικό.

Σφάλμα: Δεν έγινε αρχικοποίησητης αναφοράς.

Σφάλμα: Ασυμφωνία τύπων.

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

Page 27: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

11/23

Αναφορές l-value ως ορίσματα συναρτήσεωνΈχουμε ήδη δει ότι:

Όταν τα ορίσματα μίας συνάρτησης περνούν μέσω τιμής (pass by value), οιχειρισμοί τους εντός του σώματος της συνάρτησης δεν μεταβάλλουν τις τιμέςτων αρχικών μεταβλητών, οι οποίες εμφανίζονται στην εντολή κλήσης τηςσυνάρτησης.

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

Μπορούμε να χρησιμοποιήσουμε αναφορές:Η χρήση αναφορών για το πέρασμα ορισμάτων στις συναρτήσεις (pass byreference) παρέχει τα πλεονεκτήματα των δεικτών, χωρίς όμως την πολύπλοκησύνταξη που απαιτεί η αποαναφοροποίησή τους.Μπορεί να απαγορευτεί η μεταβολή της αρχικής μεταβλητής ορίζοντας τηναναφορά ως const type & .

Page 28: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

11/23

Αναφορές l-value ως ορίσματα συναρτήσεωνΈχουμε ήδη δει ότι:

Όταν τα ορίσματα μίας συνάρτησης περνούν μέσω τιμής (pass by value), οιχειρισμοί τους εντός του σώματος της συνάρτησης δεν μεταβάλλουν τις τιμέςτων αρχικών μεταβλητών, οι οποίες εμφανίζονται στην εντολή κλήσης τηςσυνάρτησης.Είναι δυνατόν να μεταβληθούν οι τιμές των αρχικών μεταβλητών, ανχρησιμοποιηθούν δείκτες για το πέρασμα των ορισμάτων στην συνάρτηση(pass by pointer).

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

Μπορούμε να χρησιμοποιήσουμε αναφορές:Η χρήση αναφορών για το πέρασμα ορισμάτων στις συναρτήσεις (pass byreference) παρέχει τα πλεονεκτήματα των δεικτών, χωρίς όμως την πολύπλοκησύνταξη που απαιτεί η αποαναφοροποίησή τους.Μπορεί να απαγορευτεί η μεταβολή της αρχικής μεταβλητής ορίζοντας τηναναφορά ως const type & .

Page 29: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

11/23

Αναφορές l-value ως ορίσματα συναρτήσεωνΈχουμε ήδη δει ότι:

Όταν τα ορίσματα μίας συνάρτησης περνούν μέσω τιμής (pass by value), οιχειρισμοί τους εντός του σώματος της συνάρτησης δεν μεταβάλλουν τις τιμέςτων αρχικών μεταβλητών, οι οποίες εμφανίζονται στην εντολή κλήσης τηςσυνάρτησης.Είναι δυνατόν να μεταβληθούν οι τιμές των αρχικών μεταβλητών, ανχρησιμοποιηθούν δείκτες για το πέρασμα των ορισμάτων στην συνάρτηση(pass by pointer).Με τη χρησιμοποίηση δεικτών, αποφεύγεται η αντιγραφή μεγάλου όγκουδεδομένων κατά τηνκλήση συναρτήσεων, επιταχύνοντας την εκτέλεση τουπρογράμματος.

Μπορούμε να χρησιμοποιήσουμε αναφορές:Η χρήση αναφορών για το πέρασμα ορισμάτων στις συναρτήσεις (pass byreference) παρέχει τα πλεονεκτήματα των δεικτών, χωρίς όμως την πολύπλοκησύνταξη που απαιτεί η αποαναφοροποίησή τους.Μπορεί να απαγορευτεί η μεταβολή της αρχικής μεταβλητής ορίζοντας τηναναφορά ως const type & .

Page 30: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

11/23

Αναφορές l-value ως ορίσματα συναρτήσεωνΈχουμε ήδη δει ότι:

Όταν τα ορίσματα μίας συνάρτησης περνούν μέσω τιμής (pass by value), οιχειρισμοί τους εντός του σώματος της συνάρτησης δεν μεταβάλλουν τις τιμέςτων αρχικών μεταβλητών, οι οποίες εμφανίζονται στην εντολή κλήσης τηςσυνάρτησης.Είναι δυνατόν να μεταβληθούν οι τιμές των αρχικών μεταβλητών, ανχρησιμοποιηθούν δείκτες για το πέρασμα των ορισμάτων στην συνάρτηση(pass by pointer).Με τη χρησιμοποίηση δεικτών, αποφεύγεται η αντιγραφή μεγάλου όγκουδεδομένων κατά τηνκλήση συναρτήσεων, επιταχύνοντας την εκτέλεση τουπρογράμματος.

Μπορούμε να χρησιμοποιήσουμε αναφορές:Η χρήση αναφορών για το πέρασμα ορισμάτων στις συναρτήσεις (pass byreference) παρέχει τα πλεονεκτήματα των δεικτών, χωρίς όμως την πολύπλοκησύνταξη που απαιτεί η αποαναφοροποίησή τους.

Μπορεί να απαγορευτεί η μεταβολή της αρχικής μεταβλητής ορίζοντας τηναναφορά ως const type & .

Page 31: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

11/23

Αναφορές l-value ως ορίσματα συναρτήσεωνΈχουμε ήδη δει ότι:

Όταν τα ορίσματα μίας συνάρτησης περνούν μέσω τιμής (pass by value), οιχειρισμοί τους εντός του σώματος της συνάρτησης δεν μεταβάλλουν τις τιμέςτων αρχικών μεταβλητών, οι οποίες εμφανίζονται στην εντολή κλήσης τηςσυνάρτησης.Είναι δυνατόν να μεταβληθούν οι τιμές των αρχικών μεταβλητών, ανχρησιμοποιηθούν δείκτες για το πέρασμα των ορισμάτων στην συνάρτηση(pass by pointer).Με τη χρησιμοποίηση δεικτών, αποφεύγεται η αντιγραφή μεγάλου όγκουδεδομένων κατά τηνκλήση συναρτήσεων, επιταχύνοντας την εκτέλεση τουπρογράμματος.

Μπορούμε να χρησιμοποιήσουμε αναφορές:Η χρήση αναφορών για το πέρασμα ορισμάτων στις συναρτήσεις (pass byreference) παρέχει τα πλεονεκτήματα των δεικτών, χωρίς όμως την πολύπλοκησύνταξη που απαιτεί η αποαναφοροποίησή τους.Μπορεί να απαγορευτεί η μεταβολή της αρχικής μεταβλητής ορίζοντας τηναναφορά ως const type & .

Page 32: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.

Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 33: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.

Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 34: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 35: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 36: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 37: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 38: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

12/23

Αναφορές (r-value references)

Από την τυποποίηση C++11 της C++ το 2011 και μετέπειτα,επιτρέπεται η χρήση αναφορών r-value.Οι αναφορές r-value, διαφέρουν ως προς τις αναφορές l-value που έχουμε δειέως τώρα, στο ότι μπορούν να αρχικοποιηθούν σε τιμές άλλες από μεταβλητές.Οι αναφορές r-value δηλώνονται μέσω του τελεστή && πριν τοαναγνωριστικό.

int &Lri = 33 ; // σφάλμα

int &&Rri = 33 ; // OK

int i = 2 ;int &&Rri = i ; // σφάλμα

int i = 2 ;int &&Rri = i+0 ; // OK

Σφάλμα: Μία αναφορά l-value δενμπορεί να συνδεθεί με μία σταθερά.

ΟΚ: Αρχικοποίηση σε τιμή rvalue.

Σφάλμα: Απαγορεύεται ηαρχικοποίηση σε τιμή lvalue.

ΟΚ: Η τιμή i+0 είναι τιμή rvalue.

Page 39: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

13/23

Αναφορές l-value : Άσκηση1 #include <iostream>2 using namespace std;34 void swap ( int* , int* );56 int main() {78 int i = 111;9 int j = 222;1011 int *pi = &i;12 int *pj = &j;1314 cout << "i = " << i15 << ", j = " << j << endl;1617 swap( pi, pj );1819 cout << "i = " << i20 << ", j = " << j << endl;2122 return 0;2324 }2526 void swap( int *a , int *b ) {27 int k = *a;28 *a = *b;29 *b = k;30 return;31 }

Έστω το διπλανό πρόγραμμαπου υλοποιεί την συνάρτησηswap χρησιμοποιώνταςδείκτες για να εναλλάξει τιςτιμές δύο ακεραίωνμεταβλητών.

Να μετατρέψετε τοπρόγραμμα έτσι, ώστε ναέχει την ίδια λειτουργικότητα,αλλά αντί για δείκτες ναχρησιμοποιηθούν αναφορέςl-value (δηλαδή αντί τουπεράσματος ορισμάτων μέσωδεικτών, να γίνει με πέρασμαορισμάτων μέσω αναφοράς).

Page 40: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

14/23

Διαχείριση μνήμης

Page 41: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

15/23

Μνήμη stack και heapΗ μνήμη που χρησιμοποιεί ένα πρόγραμμα, πέραν από τον χώρο που καταλαμβάνει οεκτελέσιμος κώδικας μηχανής και δεδομένα (π.χ. σταθερές, C-strings, κ.ο.κ.),διακρίνεται

στη μνήμη stack (στοίβας) καιστη μνημη heap (σωρού).

Μνήμη stackΧρησιμοποιείται για την αποθήκευση τοπικών μεταβλητών.Έχει δομή LIFO (Last-In, First-Out).Είναι εύκολα διαχειρίσιμη εντός του προγράμματος και πολύ γρήγορη (χωρίςκλήσεις προς το λειτουργικό σύστημα).Έχει μικρό μέγεθος (από μερικά kByte, ως κάποια MByte), που καθορίζεται απότο λειτουργικό σύστημα όταν το πρόγραμμα ξεκινά να εκτελείται.

Μνήμη heapΧρησιμοποιείται για την δυναμική δέσμευση μνήμης.Την διαχειρίζεται το λειτουργικό σύστημα, κατά συνέπεια είναι πιο αργή λόγωτων κλήσεων προς το λειτουργικό σύστημα.Έχει γενικά μεγάλο μέγεθος (όση και η ελεύθερη μνήμη του υπολογιστή), καιείναι διαθέσιμη προς δέσμευση και χρησιμοποίηση.

Page 42: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

15/23

Μνήμη stack και heapΗ μνήμη που χρησιμοποιεί ένα πρόγραμμα, πέραν από τον χώρο που καταλαμβάνει οεκτελέσιμος κώδικας μηχανής και δεδομένα (π.χ. σταθερές, C-strings, κ.ο.κ.),διακρίνεται

στη μνήμη stack (στοίβας) καιστη μνημη heap (σωρού).

Μνήμη stackΧρησιμοποιείται για την αποθήκευση τοπικών μεταβλητών.Έχει δομή LIFO (Last-In, First-Out).Είναι εύκολα διαχειρίσιμη εντός του προγράμματος και πολύ γρήγορη (χωρίςκλήσεις προς το λειτουργικό σύστημα).Έχει μικρό μέγεθος (από μερικά kByte, ως κάποια MByte), που καθορίζεται απότο λειτουργικό σύστημα όταν το πρόγραμμα ξεκινά να εκτελείται.

Μνήμη heapΧρησιμοποιείται για την δυναμική δέσμευση μνήμης.Την διαχειρίζεται το λειτουργικό σύστημα, κατά συνέπεια είναι πιο αργή λόγωτων κλήσεων προς το λειτουργικό σύστημα.Έχει γενικά μεγάλο μέγεθος (όση και η ελεύθερη μνήμη του υπολογιστή), καιείναι διαθέσιμη προς δέσμευση και χρησιμοποίηση.

Page 43: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

15/23

Μνήμη stack και heapΗ μνήμη που χρησιμοποιεί ένα πρόγραμμα, πέραν από τον χώρο που καταλαμβάνει οεκτελέσιμος κώδικας μηχανής και δεδομένα (π.χ. σταθερές, C-strings, κ.ο.κ.),διακρίνεται

στη μνήμη stack (στοίβας) καιστη μνημη heap (σωρού).

Μνήμη stackΧρησιμοποιείται για την αποθήκευση τοπικών μεταβλητών.Έχει δομή LIFO (Last-In, First-Out).Είναι εύκολα διαχειρίσιμη εντός του προγράμματος και πολύ γρήγορη (χωρίςκλήσεις προς το λειτουργικό σύστημα).Έχει μικρό μέγεθος (από μερικά kByte, ως κάποια MByte), που καθορίζεται απότο λειτουργικό σύστημα όταν το πρόγραμμα ξεκινά να εκτελείται.

Μνήμη heapΧρησιμοποιείται για την δυναμική δέσμευση μνήμης.Την διαχειρίζεται το λειτουργικό σύστημα, κατά συνέπεια είναι πιο αργή λόγωτων κλήσεων προς το λειτουργικό σύστημα.Έχει γενικά μεγάλο μέγεθος (όση και η ελεύθερη μνήμη του υπολογιστή), καιείναι διαθέσιμη προς δέσμευση και χρησιμοποίηση.

Page 44: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

16/23

Τελεστές new και deleteΔέσμευση μνήμης stack κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος.

double d = 33.5 ; // δέσμευση μνήμης stack και αρχικοποίησηdouble *pd = &d ; // δήλωση δείκτη και αρχικοποίηση

Δυναμική δέσμευση μνήμης heap (κατά την εκτέλεση) μέσω του τελεστή new:

double *pd ; // δήλωση δείκτηpd = new double; // δέσμευση μνήμης heap*pd = 33.5 ; // απόδοση τιμής

double *pd = new double(33.5); // ή ισοδύναμα (all-in-one...)

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

double *pd = new double(33.5); // δέσμευση μνήμης heapcout << *pd << endl;delete pd ; // αποδέσμευση μνήμης heap

Το delete μπορεί να χρησιμοποιηθεί εφόσον έχει προηγηθεί κάπου στο τρέχον μπλοκσχετική εντολή new.

Page 45: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

16/23

Τελεστές new και deleteΔέσμευση μνήμης stack κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος.

double d = 33.5 ; // δέσμευση μνήμης stack και αρχικοποίησηdouble *pd = &d ; // δήλωση δείκτη και αρχικοποίηση

Δυναμική δέσμευση μνήμης heap (κατά την εκτέλεση) μέσω του τελεστή new:

double *pd ; // δήλωση δείκτηpd = new double; // δέσμευση μνήμης heap*pd = 33.5 ; // απόδοση τιμής

double *pd = new double(33.5); // ή ισοδύναμα (all-in-one...)

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

double *pd = new double(33.5); // δέσμευση μνήμης heapcout << *pd << endl;delete pd ; // αποδέσμευση μνήμης heap

Το delete μπορεί να χρησιμοποιηθεί εφόσον έχει προηγηθεί κάπου στο τρέχον μπλοκσχετική εντολή new.

Page 46: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

16/23

Τελεστές new και deleteΔέσμευση μνήμης stack κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος.

double d = 33.5 ; // δέσμευση μνήμης stack και αρχικοποίησηdouble *pd = &d ; // δήλωση δείκτη και αρχικοποίηση

Δυναμική δέσμευση μνήμης heap (κατά την εκτέλεση) μέσω του τελεστή new:

double *pd ; // δήλωση δείκτηpd = new double; // δέσμευση μνήμης heap*pd = 33.5 ; // απόδοση τιμής

double *pd = new double(33.5); // ή ισοδύναμα (all-in-one...)

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

double *pd = new double(33.5); // δέσμευση μνήμης heapcout << *pd << endl;delete pd ; // αποδέσμευση μνήμης heap

Το delete μπορεί να χρησιμοποιηθεί εφόσον έχει προηγηθεί κάπου στο τρέχον μπλοκσχετική εντολή new.

Page 47: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

17/23

Τελεστές new[] και delete[]Δέσμευση μνήμης stack για πίνακα κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος,ακόμη κι αν δεν χρησιμοποιηθεί σε όλη την έκταση του προγράμματος.

double a[1000] ; // δέσμευση μνήμης stack

Δυναμική δέσμευση μνήμης heap για πίνακα (κατά την εκτέλεση, τελεστής new[]):

int n;cout << "Δώσε τον αριθμό στοιχείων του πίνακα: "cin >> n ;double *a = new double[n] ; // δήλωση δείκτη πίνακα, δέσμευση μνήμης heap

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

delete a[] ; // αποδέσμευση μνήμης heap

Η εντολή delete μπορεί να χρησιμοποιηθεί, εφόσον έχει προηγηθεί,κάπου στο τρέχον μπλοκ, μία σχετική εντολή new.Η μνήμη heap που αποδεσμεύεται, αποδίδεται πίσω στο λειτουργικό σύστημα,και μπορεί να χρησιμοποηθεί, πλέον, για κάποιον άλλο σκοπό.

Page 48: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

17/23

Τελεστές new[] και delete[]Δέσμευση μνήμης stack για πίνακα κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος,ακόμη κι αν δεν χρησιμοποιηθεί σε όλη την έκταση του προγράμματος.

double a[1000] ; // δέσμευση μνήμης stack

Δυναμική δέσμευση μνήμης heap για πίνακα (κατά την εκτέλεση, τελεστής new[]):

int n;cout << "Δώσε τον αριθμό στοιχείων του πίνακα: "cin >> n ;double *a = new double[n] ; // δήλωση δείκτη πίνακα, δέσμευση μνήμης heap

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

delete a[] ; // αποδέσμευση μνήμης heap

Η εντολή delete μπορεί να χρησιμοποιηθεί, εφόσον έχει προηγηθεί,κάπου στο τρέχον μπλοκ, μία σχετική εντολή new.Η μνήμη heap που αποδεσμεύεται, αποδίδεται πίσω στο λειτουργικό σύστημα,και μπορεί να χρησιμοποηθεί, πλέον, για κάποιον άλλο σκοπό.

Page 49: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

17/23

Τελεστές new[] και delete[]Δέσμευση μνήμης stack για πίνακα κατά τη μεταγλώττιση:παραμένει δεσμευμένη καθόλη τη διάρκεια της εκτέλεσης του προγράμματος,ακόμη κι αν δεν χρησιμοποιηθεί σε όλη την έκταση του προγράμματος.

double a[1000] ; // δέσμευση μνήμης stack

Δυναμική δέσμευση μνήμης heap για πίνακα (κατά την εκτέλεση, τελεστής new[]):

int n;cout << "Δώσε τον αριθμό στοιχείων του πίνακα: "cin >> n ;double *a = new double[n] ; // δήλωση δείκτη πίνακα, δέσμευση μνήμης heap

Αποδέσμευση μνήμης heap μέσω του τελεστή delete:

delete a[] ; // αποδέσμευση μνήμης heap

Η εντολή delete μπορεί να χρησιμοποιηθεί, εφόσον έχει προηγηθεί,κάπου στο τρέχον μπλοκ, μία σχετική εντολή new.Η μνήμη heap που αποδεσμεύεται, αποδίδεται πίσω στο λειτουργικό σύστημα,και μπορεί να χρησιμοποηθεί, πλέον, για κάποιον άλλο σκοπό.

Page 50: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

18/23

C++ strings

Page 51: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.

Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 52: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.

Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 53: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].

Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 54: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 55: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.

Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 56: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.

Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 57: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

19/23

C++ strings

Η γενίκευση των C-strings (αλφαριθμητικών ακολουθιών) οδηγεί στην κλάσητης C++ που ονομάζεται string.Τα C++ strings μπορούν να συγκριθούν, να επεκταθούν, να συγκοληθούν, ναχρησιμοποιηθούν σε αναζητήσεις χαρακτήρων και επιμέρους strings.Οι επιμέρους χαρακτήρες ενός string είναι προσβάσιμοι μέσω του τελεστή [].Μπορούν να χρησιμοποιηθούν με τους (υπερφορτωμένους) λογικούς τελεστές:< <= > >= == ! =

Ένα string μπορεί να αρχικοποιηθεί από έναν πίνακα char.Η μέθοδος c_str() ενός string μπορεί να χρησιμοποιηθεί για να ληφθεί τοαντίστοιχο C-string, μια που πολλές υπάρχουσες βιβλιοθήκεςπαρέχουν συναρτήσεις που δέχονται ορίσματα C-strings.Η μέθοδος size() ενός string δίνει το μήκος του σε byte, λαμβάνοντας υπόψητους όποιους multi-byte χαρακτήρες (π.χ. τους ελληνικούς Unicode).

Page 58: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

20/23

C++ strings

Παραδείγματα:

string str1 ; // Εξ ορισμού μέθοδος κατασκευής, κενό stringstr1 = "Τμήμα"; // έμμεση απόδοση τιμής;

string str2("Φυσικής") ; // κατασκευή με αρχικοποίηση

string str3 = "Γιάννης" ; // κατασκευή και έμμεση απόδοση τιμήςif ( str3 == "Γιάννης" ) { // έλεγχος ισότητας

cout << "Γεια σου Γιάννη..." << endl;}

string str4 = str1 + " " + str2 ; // συγκόλληση μέσω του τελεστή +cout << str4 << endl; // τυπώνει στην οθόνη "Τμήμα Φυσικής"

cout << str4.size() << endl; // τυπώνει στην οθόνη 25, επειδή οι 12 ελληνικοί// χαρακτήρες είναι 2-byte Unicode, και το κενό// μεταξύ των λέξεων απασχολεί 1 byte

Page 59: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

20/23

C++ strings

Παραδείγματα:

string str1 ; // Εξ ορισμού μέθοδος κατασκευής, κενό stringstr1 = "Τμήμα"; // έμμεση απόδοση τιμής;

string str2("Φυσικής") ; // κατασκευή με αρχικοποίηση

string str3 = "Γιάννης" ; // κατασκευή και έμμεση απόδοση τιμήςif ( str3 == "Γιάννης" ) { // έλεγχος ισότητας

cout << "Γεια σου Γιάννη..." << endl;}

string str4 = str1 + " " + str2 ; // συγκόλληση μέσω του τελεστή +cout << str4 << endl; // τυπώνει στην οθόνη "Τμήμα Φυσικής"

cout << str4.size() << endl; // τυπώνει στην οθόνη 25, επειδή οι 12 ελληνικοί// χαρακτήρες είναι 2-byte Unicode, και το κενό// μεταξύ των λέξεων απασχολεί 1 byte

Page 60: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

20/23

C++ strings

Παραδείγματα:

string str1 ; // Εξ ορισμού μέθοδος κατασκευής, κενό stringstr1 = "Τμήμα"; // έμμεση απόδοση τιμής;

string str2("Φυσικής") ; // κατασκευή με αρχικοποίηση

string str3 = "Γιάννης" ; // κατασκευή και έμμεση απόδοση τιμήςif ( str3 == "Γιάννης" ) { // έλεγχος ισότητας

cout << "Γεια σου Γιάννη..." << endl;}

string str4 = str1 + " " + str2 ; // συγκόλληση μέσω του τελεστή +cout << str4 << endl; // τυπώνει στην οθόνη "Τμήμα Φυσικής"

cout << str4.size() << endl; // τυπώνει στην οθόνη 25, επειδή οι 12 ελληνικοί// χαρακτήρες είναι 2-byte Unicode, και το κενό// μεταξύ των λέξεων απασχολεί 1 byte

Page 61: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

20/23

C++ strings

Παραδείγματα:

string str1 ; // Εξ ορισμού μέθοδος κατασκευής, κενό stringstr1 = "Τμήμα"; // έμμεση απόδοση τιμής;

string str2("Φυσικής") ; // κατασκευή με αρχικοποίηση

string str3 = "Γιάννης" ; // κατασκευή και έμμεση απόδοση τιμήςif ( str3 == "Γιάννης" ) { // έλεγχος ισότητας

cout << "Γεια σου Γιάννη..." << endl;}

string str4 = str1 + " " + str2 ; // συγκόλληση μέσω του τελεστή +cout << str4 << endl; // τυπώνει στην οθόνη "Τμήμα Φυσικής"

cout << str4.size() << endl; // τυπώνει στην οθόνη 25, επειδή οι 12 ελληνικοί// χαρακτήρες είναι 2-byte Unicode, και το κενό// μεταξύ των λέξεων απασχολεί 1 byte

Page 62: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

20/23

C++ strings

Παραδείγματα:

string str1 ; // Εξ ορισμού μέθοδος κατασκευής, κενό stringstr1 = "Τμήμα"; // έμμεση απόδοση τιμής;

string str2("Φυσικής") ; // κατασκευή με αρχικοποίηση

string str3 = "Γιάννης" ; // κατασκευή και έμμεση απόδοση τιμήςif ( str3 == "Γιάννης" ) { // έλεγχος ισότητας

cout << "Γεια σου Γιάννη..." << endl;}

string str4 = str1 + " " + str2 ; // συγκόλληση μέσω του τελεστή +cout << str4 << endl; // τυπώνει στην οθόνη "Τμήμα Φυσικής"

cout << str4.size() << endl; // τυπώνει στην οθόνη 25, επειδή οι 12 ελληνικοί// χαρακτήρες είναι 2-byte Unicode, και το κενό// μεταξύ των λέξεων απασχολεί 1 byte

Page 63: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

21/23

Αρχεία στη C++

Page 64: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

22/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : εγγραφήΗ εγγραφή δεδομένων σε ένα αρχείο εξόδου,γίνεται κατ’ αναλογία της εγγραφής στο ρεύμα εξόδου cout.

Για τον ορισμό ενός ρεύματος εξόδου σε αρχείο, χρησιμοποιείται η κλάση ofstream,από την επικεφαλίδα <fstream>, όπως φαίνεται στο ακόλουθο παράδειγμα:#include <iostream>#include <fstream>using namespace std;int main() {

ofstream F_out("myData.dat"); // Δημιουργία αρχείου εξόδουfor ( int i=10 ; i<15 ; i++ ) {// εγγραφή στο αρχείοF_out << i << " " << i*i << " " << i*i*i << endl;

}}

Μεταγλώττιση, Εκτέλεση, Εμφάνιση περιεχομένων του αρχείου myData.dat[bash 1] g++ -std=c++11 prog1.cpp -o prog1.exe[bash 2] ./prog1.exe[bash 3] cat myData.dat10 100 100011 121 133112 144 172813 169 219714 196 2744

Page 65: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

22/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : εγγραφήΗ εγγραφή δεδομένων σε ένα αρχείο εξόδου,γίνεται κατ’ αναλογία της εγγραφής στο ρεύμα εξόδου cout.Για τον ορισμό ενός ρεύματος εξόδου σε αρχείο, χρησιμοποιείται η κλάση ofstream,από την επικεφαλίδα <fstream>, όπως φαίνεται στο ακόλουθο παράδειγμα:

#include <iostream>#include <fstream>using namespace std;int main() {

ofstream F_out("myData.dat"); // Δημιουργία αρχείου εξόδουfor ( int i=10 ; i<15 ; i++ ) {// εγγραφή στο αρχείοF_out << i << " " << i*i << " " << i*i*i << endl;

}}

Μεταγλώττιση, Εκτέλεση, Εμφάνιση περιεχομένων του αρχείου myData.dat[bash 1] g++ -std=c++11 prog1.cpp -o prog1.exe[bash 2] ./prog1.exe[bash 3] cat myData.dat10 100 100011 121 133112 144 172813 169 219714 196 2744

Page 66: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

22/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : εγγραφήΗ εγγραφή δεδομένων σε ένα αρχείο εξόδου,γίνεται κατ’ αναλογία της εγγραφής στο ρεύμα εξόδου cout.Για τον ορισμό ενός ρεύματος εξόδου σε αρχείο, χρησιμοποιείται η κλάση ofstream,από την επικεφαλίδα <fstream>, όπως φαίνεται στο ακόλουθο παράδειγμα:#include <iostream>#include <fstream>using namespace std;int main() {

ofstream F_out("myData.dat"); // Δημιουργία αρχείου εξόδουfor ( int i=10 ; i<15 ; i++ ) {

// εγγραφή στο αρχείοF_out << i << " " << i*i << " " << i*i*i << endl;

}}

Μεταγλώττιση, Εκτέλεση, Εμφάνιση περιεχομένων του αρχείου myData.dat[bash 1] g++ -std=c++11 prog1.cpp -o prog1.exe[bash 2] ./prog1.exe[bash 3] cat myData.dat10 100 100011 121 133112 144 172813 169 219714 196 2744

Page 67: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

22/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : εγγραφήΗ εγγραφή δεδομένων σε ένα αρχείο εξόδου,γίνεται κατ’ αναλογία της εγγραφής στο ρεύμα εξόδου cout.Για τον ορισμό ενός ρεύματος εξόδου σε αρχείο, χρησιμοποιείται η κλάση ofstream,από την επικεφαλίδα <fstream>, όπως φαίνεται στο ακόλουθο παράδειγμα:#include <iostream>#include <fstream>using namespace std;int main() {

ofstream F_out("myData.dat"); // Δημιουργία αρχείου εξόδουfor ( int i=10 ; i<15 ; i++ ) {

// εγγραφή στο αρχείοF_out << i << " " << i*i << " " << i*i*i << endl;

}}

Μεταγλώττιση, Εκτέλεση, Εμφάνιση περιεχομένων του αρχείου myData.dat[bash 1] g++ -std=c++11 prog1.cpp -o prog1.exe[bash 2] ./prog1.exe[bash 3] cat myData.dat10 100 100011 121 133112 144 172813 169 219714 196 2744

Page 68: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

23/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : ανάγνωσηΗ ανάγνωση δεδομένων από ένα αρχείο εισόδου,γίνεται κατ’ αναλογία της ανάγνωσης από το ρεύμα εισόδου cin.

Για τον ορισμό ενός ρεύματος εισόδου από αρχείο, χρησιμοποιείται η κλάσηifstream, από την επικεφαλίδα <fstream>. Στο ακόλουθο παράδειγμα,διαβάζονται τα περιεχόμενα του αρχείου myData.dat που εγγράφηκε προηγουμένως.#include <iostream>#include <fstream>using namespace std;int main() {

int i1, i2, i3;ifstream F_in("myData.dat"); // άνοιγμα αρχείου εισόδουfor ( int i=10 ; i<15 ; i++ ) {F_in >> i1 >> i2 >> i3 ; // ανάγνωση από το αρχείοcout << i3 << " " << i1 << endl;

}}

Μεταγλώττιση, Εκτέλεση[bash 1] g++ -std=c++11 prog2.cpp -o prog2.exe[bash 2] ./prog2.exe1000 101331 111728 122197 132744 14

Page 69: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

23/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : ανάγνωσηΗ ανάγνωση δεδομένων από ένα αρχείο εισόδου,γίνεται κατ’ αναλογία της ανάγνωσης από το ρεύμα εισόδου cin.Για τον ορισμό ενός ρεύματος εισόδου από αρχείο, χρησιμοποιείται η κλάσηifstream, από την επικεφαλίδα <fstream>. Στο ακόλουθο παράδειγμα,διαβάζονται τα περιεχόμενα του αρχείου myData.dat που εγγράφηκε προηγουμένως.

#include <iostream>#include <fstream>using namespace std;int main() {

int i1, i2, i3;ifstream F_in("myData.dat"); // άνοιγμα αρχείου εισόδουfor ( int i=10 ; i<15 ; i++ ) {F_in >> i1 >> i2 >> i3 ; // ανάγνωση από το αρχείοcout << i3 << " " << i1 << endl;

}}

Μεταγλώττιση, Εκτέλεση[bash 1] g++ -std=c++11 prog2.cpp -o prog2.exe[bash 2] ./prog2.exe1000 101331 111728 122197 132744 14

Page 70: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

23/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : ανάγνωσηΗ ανάγνωση δεδομένων από ένα αρχείο εισόδου,γίνεται κατ’ αναλογία της ανάγνωσης από το ρεύμα εισόδου cin.Για τον ορισμό ενός ρεύματος εισόδου από αρχείο, χρησιμοποιείται η κλάσηifstream, από την επικεφαλίδα <fstream>. Στο ακόλουθο παράδειγμα,διαβάζονται τα περιεχόμενα του αρχείου myData.dat που εγγράφηκε προηγουμένως.#include <iostream>#include <fstream>using namespace std;int main() {

int i1, i2, i3;ifstream F_in("myData.dat"); // άνοιγμα αρχείου εισόδουfor ( int i=10 ; i<15 ; i++ ) {

F_in >> i1 >> i2 >> i3 ; // ανάγνωση από το αρχείοcout << i3 << " " << i1 << endl;

}}

Μεταγλώττιση, Εκτέλεση[bash 1] g++ -std=c++11 prog2.cpp -o prog2.exe[bash 2] ./prog2.exe1000 101331 111728 122197 132744 14

Page 71: C++/ROOT Περιεχόμενα ...+/C++-ROOT-slides... · 35 Μεταβλητή περιβάλλοντος 0: LANG=en_US.UTF-8 36 Μεταβλητή περιβάλλοντος 1:

C++ / ROOT

Ι. Παπαδόπουλος

Περιεχόμενα

Γραμμήεντολής

Δείκτες προςσυναρτήσεις

Αναφορέςl-value

Πέρασμα ορισμάτων

r-value

ΔιαχείρισημνήμηςΜνήμη stack και heap

new, delete

new[], delete[]

C++ strings

Αρχεία

23/23

Αρχεία στη C++ (επικεφαλίδα <fstream>) : ανάγνωσηΗ ανάγνωση δεδομένων από ένα αρχείο εισόδου,γίνεται κατ’ αναλογία της ανάγνωσης από το ρεύμα εισόδου cin.Για τον ορισμό ενός ρεύματος εισόδου από αρχείο, χρησιμοποιείται η κλάσηifstream, από την επικεφαλίδα <fstream>. Στο ακόλουθο παράδειγμα,διαβάζονται τα περιεχόμενα του αρχείου myData.dat που εγγράφηκε προηγουμένως.#include <iostream>#include <fstream>using namespace std;int main() {

int i1, i2, i3;ifstream F_in("myData.dat"); // άνοιγμα αρχείου εισόδουfor ( int i=10 ; i<15 ; i++ ) {

F_in >> i1 >> i2 >> i3 ; // ανάγνωση από το αρχείοcout << i3 << " " << i1 << endl;

}}

Μεταγλώττιση, Εκτέλεση[bash 1] g++ -std=c++11 prog2.cpp -o prog2.exe[bash 2] ./prog2.exe1000 101331 111728 122197 132744 14