SlideShare a Scribd company logo
H ΓΛΩΣΣΑ C++
Μάθημα 3:
Κλάσεις και Δείκτες
Δημήτρης Ψούνης
Περιεχόμενα Μαθήματος
Α. Θεωρία
1. Διαχείριση Μνήμης
1. Στατική Δέσμευση Μνήμης
2. Στατική Δέσμευση Μνήμης για
Συνήθεις Μεταβλητές
3. Στατική Δέσμευση Μνήμης για
Αντικείμενα
2. Δυναμική Δέσμευση Μνήμης
1. Δείκτες (Υπενθύμιση από C)
2. Οι τελεστές new και delete
3. Δυναμική Δέσμευση για Συνήθεις
Μεταβλητές
4. Δυναμική Δέσμευση για Αντικείμενα
5. Δυναμική Δέσμευση και
Κατασκευαστές
2Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
3. Κλάσεις που περιέχουν δείκτες
1. Παράδειγμα κλάσης που περιέχει
δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για
την ώρα)
4. Δυναμική Δέσμευση Μνήμης για
Πίνακες
1. Μονοδιάστατοι πίνακες
2. Παράδειγμα δέσμευσης μνήμης για
μονοδιάστατους πίνακες
3. Διδιάστατοι πίνακες
4. Παράδειγμα δέσμευσης μνήμης για
διδιάστατους πίνακες
B. Ασκήσεις
A. Θεωρία
1. Διαχείριση Μνήμης
1. Στατική και Δυναμική Δέσμευση Μνήμης
3Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Η διαχείριση μνήμης στη C++ γίνεται με παρόμοιο τρόπο με τη C.
• Τα παρακάτω είναι εντελώς αντίστοιχα:
• Στατική Δέσμευση Μνήμης:
• Είναι γνωστός εκ των προτέρων ο χώρος μνήμης που απαιτείται για τα στιγμιότυπα.
• Και έχει ήδη αποφασιστεί κατά το χρόνο μεταγλώττισης (π.χ. δηλώνουμε έναν πίνακα 10
θέσεων)
• Οι τοπικές μεταβλητές αποθηκεύονται στον χώρο της συνάρτησης (στοίβα – stack)
• Δυναμική Δέσμευση Μνήμης:
• Δεν είναι γνωστός εκ των προτέρων ο χώρος μνήμης που πρέπει να δεσμεύσει το
πρόγραμμά μας.
• Αλλά αποφασίζεται κατά το χρόνο εκτέλεσης (π.χ. ο χρήστης αποφασίζει πόσες θέσεις θα
έχει ένας πίνακας που χρησιμοποιεί το πρόγραμμα)
• Ο χώρος μνήμης που δεσμεύεται δυναμικά είναι κοινός για όλες τις συναρτήσεις (σωρός –
heap)
A. Θεωρία
1. Διαχείριση Μνήμης
2. Στατική Δέσμευση μνήμης για συνήθεις μεταβλητές
4Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.local_variables.cpp */
#include <iostream>
using namespace std;
void f()
{
int y=3;
cout<<"inside f";
}
int main()
{
int x=5;
cout<<"inside main";
f();
return 0;
}
• Κάθε συνάρτηση έχει το δικό της χώρο μνήμης.
• Κάθε τοπική μεταβλητή αποθηκεύεται στο χώρο μνήμης της
συνάρτησης στην οποία ανήκει.
• Σχηματικά, για το παράδειγμα:
• Αυτός ο χώρος μνήμης καλείται και στοίβα (stack), λόγω του
τρόπου με τον οποίο εχει υλοποιηθεί η κλήση των
συναρτήσεων σε μία στοίβα:
main
f
A. Θεωρία
1. Διαχείριση Μνήμης
3. Στατική Δέσμευση μνήμης για Αντικείμενα
5Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ένα αντικείμενο αποθηκεύεται στη μνήμη ως εξής:
• Τα μέλη του βρίσκονται σε διαδοχικές θέσεις μνήμης
• Προσοχή, οι μέθοδοι βρίσκονται σε άλλο χώρο (είναι κοινές για όλα τα αντικείμενα της κλάσης)
• Ο τελεστής sizeof μπορεί να χρησιμοποιήθεί για να μετρήσουμε το πλήθος των bytes που
χρησιμοποιεί ένα αντικείμενο.
• Παράδειγμα:
/* CPP3.sizeof.cpp
Μέγεθος αντικειμένου */
#include <iostream>
using namespace std;
class dummy {
public:
int x;
int y;
};
int main()
{
dummy ob;
ob.x = 3; ob.y = 5;
cout<<sizeof ob<<endl;
return 0;
}
• Θα τυπώσει 8 (δύο ακέραιοι 4bytes ο
καθένας)
• Και η εικόνα της μνήμης:
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
1. Δείκτες (Υπενθύμιση από C)
6Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ένας δείκτης είναι μια μεταβλητή που αποθηκεύει διευθύνσεις μεταβλητών
• Ένας δείκτης δηλώνεται ως εξής:
• Όπου ΤΔ είναι ένας οποιοσδήποτε τύπος δεδομένων (int, float, double κ.λπ.)
• Π.χ. ένας δείκτης σε ακέραιο δηλώνεται με τη δήλωση:
• Αποθηκεύουμε σε έναν δείκτη την διεύθυνση μιας μεταβλητής με τη δήλωση:
• O τελεστής & επιστρέφει τη διεύθυνση της μεταβλητής στην οποία εφαρμόζεται.
• Π.χ. αποθηκεύουμε στον δείκτη ptr τη διεύθυνση μιας μεταβλητής x με την εντολή:
• και λέμε «ο δείκτης ptr δείχνει στην μεταβλητή x»
ΤΔ *pointer_name;
int *ptr;
pointer_name = &variable;
ptr = &x;
• Αναλυτικά βλ. και «Γλώσσα C – Μάθημα 8: Δείκτες»
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
1. Δείκτες (Υπενθύμιση από C)
7Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.pointers.cpp */
#include <iostream>
using namespace std;
int main()
{
int x=5;
int *p = NULL;
p = &x;
cout<<"x = "<<x<<" (address: "<<&x<<")"<<endl;
cout<<"*p = "<<*p<<" (address: "<<p<<")"<<endl;
return 0;
}
• Το πρόγραμμα δείχνει την βασική ιδιότητα:
• Για ένα δείκτη (p) που «δείχνει» σε μία
μεταβλητη ισχύουν:
• To NULL είναι μία ειδική τιμή
• που συμβολίζει ότι ο δείκτης δεν
δείχνει κάπου.
• Είναι καλό ένας δείκτης που δεν δείχνει
κάπου να έχει την τιμή NULL
• H τιμη του NULL είναι 0.
• Σχηματικά:
p == &x //Διεύθυνση της x
*p == x // Τιμή της x
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
2. Οι τελεστές new και delete
8Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ο τελεστής new χρησιμοποιείται για να δεσμεύσει δυναμικά χώρο μνήμης
• Αντικαθιστά τη malloc της C.
• Η σύνταξη του είναι:
• Δεσμεύει χώρο μνήμης για ένα αντικείμενου τύπου type και επιστρέφει έναν δείκτη σε
αυτόν το χώρο
• Ο χώρος μνήμης που δεσμεύεται δυναμικά, είναι κοινός για όλες τις συναρτήσεις και
ονομάζεται σωρός (heap)
• Προσοχή, αν αποτύχει η δέσμευση (δεν υπάρχει χώρος) επιστρέφει NULL
• και θα πρέπει πάντα να ελέγχουμε ότι η δέσμευση έγινε επιτυχημένα
ptr = new type;
• Ο τελεστής delete χρησιμοποιείται για να απόδεσμευσει χώρο μνήμης που έχει δεσμευτεί
δυναμικά
• Αντικαθιστά τη free της C.
• Η σύνταξη του είναι:
delete ptr;
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
2. Οι τελεστές new και delete (Έλεγχος Δέσμευσης Μνήμης)
9Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Πάντα πρέπει να κάνουμε έλεγχο αν η μνήμη που αιτηθήκαμε με τη new, έχει όντως δεσμευτεί.
• Βλέπουμε τρεις τρόπους για να «πιάσουμε» το πρόβλημα:
• A’ τρόπος: Ο πιο απλός, μιας και απλά ελέγχουμε την επιστρεφόμενη τιμή:
• Β’ τρόπος: Πιο ψαγμένος, ξέρουμε ότι το NULL είναι 0 (και για να είμαστε ακριβής (void *) 0)
• Και ξέρουμε ότι το 0, είναι το λογικό ψευδές
• και το !0 είναι το λογικό αληθές:
• Γ’τρόπος: Ο πιο σύνθετος και φαντεζί, αλλά ενσωματώνει τις δύο εντολές σε μία γραμμή:
• Στις σημειώσεις θα χρησιμοποιήσουμε κυρίως το Β’ τρόπο
• Και θα βγάζουμε απλά ένα ενημερωτικό μήνυμα (αργότερα θα μπορούμε να κάνουμε και
περισσότερα πράγματα, με τις εξαιρέσεις της C++)
ptr = new type;
if (ptr==NULL)
{ …. do some action… }
ptr = new type;
if (!ptr)
{ …. do some action… }
if (!(ptr = new type))
{ …. do some action… }
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
3. Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
10Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Το παράδειγμα δείχνει τη δέσμευση
μνήμης για έναν ακέραιο αριθμό, τόσο
στατικά όσο και δυναμικά:
#include <iostream> // CPP3.dynamic_variable.cpp
using namespace std;
int main()
{
int x; // Μεταβλητή που δεσμέυει στατικό χώρο
int *p; // Δείκτης σε ακέραιο
p = new int; // Δυναμική δέσμευση μνήμης
if (!p) cout<<“Error allocating memory”;
/* Αναθέσεις τιμών */
x = 1;
*p = 5;
/* Εκτυπώσεις */
cout<<"x = "<<x<<" (address: "<<&x<<")"<<endl;
cout<<"*p = "<<*p<<" (address: "<<p<<")"<<endl;
delete p; // Αποδέσμευση μνήμης
return 0;
}
Υπενθυμίσεις από τη C:
• Η x δεσμεύει χώρο μνήμης μέσα στο χώρο
μνήμης της συνάρτησης
• Ο χώρος που δεσμεύεται δυναμικά μέσω
της p, είναι ένας ξεχωριστός χώρος, κοινός
για όλο το πρόγραμμα
• (λέγεται και σωρός – heap)
• Σχηματικά:
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
4. Δυναμική Δέσμευση για Αντικείμενα
11Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.dynamic_object.cpp Δυναμική Δέσμευση
μνήμης για αντικείμενο */
#include <iostream>
using namespace std;
class dummy {
public:
int x;
};
int main()
{
dummy *p = NULL; //Θα δείξει σε αντικείμενο
p = new dummy; // Δέσμευση χώρου
if (!p) cout<<“Error allocating memory”;
/* Αναθέσεις τιμών */
p->x = 5;
/* Εκτυπώσεις */
cout<<"p->x = "<<p->x<<endl;
delete p; // Αποδέσμευση μνήμης
return 0;
}
• Αντίστοιχα (αφού μία κλάση είναι τύπος δεδομένων), μπορεί να δεσμευτεί δυναμικά χώρος
μνήμης για ένα αντικείμενο.
• Όταν χρησιμοποιούμε ένα αντικείμενο μέσω δείκτη,
• Έχουμε πρόσβαση στα δημόσια μέλη-μεθόδους μέσω του τελεστή -> (βελάκι)
• Βλέπουμε και ένα παράδειγμα:
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
4. Δυναμική Δέσμευση για Αντικείμενα
12Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.dereferencing.cpp */
#include <iostream>
using namespace std;
class dummy {
public:
int x;
};
int main()
{
dummy *p = NULL; //Θα δείξει σε αντικείμενο
p = new dummy; // Δέσμευση χώρου
if (!p) cout<<“Error allocating memory”;
/* Αναθέσεις τιμών */
(*p).x = 5;
/* Εκτυπώσεις */
cout<<"(*p).x = "<<(*p).x<<endl;
delete p; // Αποδέσμευση μνήμης
return 0;
}
• Δεδομένου ενός δείκτη που δείχνει σε ένα αντικείμενο.
• Με τον τελεστή *, έχουμε πρόσβαση στο ίδιο το αντικείμενο (dereferencing)
• Και ισχύει ότι το (*p) είναι το αντικείμενο στο οποίο δείχνει ο δείκτης.
• Συνεπώς έχουμε πρόσβαση στα δημόσια μέλη του (*p) με τον τελεστή . (τελεία)
• Βλέπουμε και ένα παράδειγμα:
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
4. Δυναμική Δέσμευση για Αντικείμενα
13Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.pointers_and_objects.cpp Δείκτης σε
αντικείμενο */
#include <iostream>
using namespace std;
class dummy {
public:
int x;
};
int main()
{
dummy ob;
dummy *p = &ob;
if (!p) cout<<“Error allocating memory”;
/* Αναθέσεις τιμών */
ob.x = 6;
/* Εκτυπώσεις */
cout<<ob.x<<" "<<p->x<<" "<<(*p).x<<endl;
return 0;
}
• Και ένα ακόμη παράδειγμα, όπου βάζουμε ένα δείκτη να δείχνει σε ένα ήδη υφιστάμενο
αντικείμενο:
• Για να τονιστεί η διαφορά στην πρόσβαση,
• απευθείας από το αντικείμενο (τελεστής .)
• μέσω δείκτη (τελεστής ->)
• μέσω dereferencing ( * και . )
A. Θεωρία
2. Δυναμική Δέσμευση Μνήμης
5. Δυναμική Δέσμευση και κατασκευαστές
14Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Όταν δημιουργούμε ένα αντικείμενο με τον τελεστή new,
• και εφόσον το αντικείμενο αυτό έχει κατασκευαστή
• πρέπει να περάσουμε και τα ορίσματα στον κατασκευαστή
• Ο κατασκευαστής καλείται όταν κάνουμε new
• Ο καταστροφέας καλείται όταν κάνουμε delete
/*
CPP3.constructor_destru
ctor.cpp */
#include <iostream>
using namespace std;
class dummy {
public:
dummy(int in_x);
~dummy();
private:
int x;
};
int main()
{
dummy *p = NULL;
p = new dummy(5); //constructing
if (!p) cout<<“Error allocating
memory”;
delete p; //destructing
return 0;
}
dummy::dummy(int in_x)
{
x = in_x;
cout<<"Constructing...";
}
dummy::~dummy()
{
cout<<"Destructing...";
}
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
1. Παράδειγμα κλάσης που περιέχει δείκτη
15Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ένας δείκτης είναι απλά μία μεταβλητή
• Συνεπώς μπορεί να είναι μέλος σε κλάση
• Βλέπουμε ένα απλό παράδειγμα:
• Στο οποίο δεσμεύουμε δυναμικά στον κατασκευαστή το χώρο για έναν ακέραιο
• και τον αποδεσμεύουμε στον καταστροφέα.
/* CPP3.class_with_pointer */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
~dummy();
void set_val(int in_val);
int get_val();
private:
int *p_val;
};
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
1. Παράδειγμα κλάσης που περιέχει δείκτη
16Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
int main()
{
dummy ob;
ob.set_val(3);
cout<<endl<<ob.get_val()<<endl;
return 0;
}
dummy::dummy()
{
p_val = new int;
if (!p_val) cout<<"Error allocating memory";
cout<<"Constructing...";
}
dummy::~dummy()
{
delete p_val;
cout<<"Destructing...";
}
void dummy::set_val(int in_val)
{
*p_val = in_val;
}
int dummy::get_val()
{
return *p_val;
}
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
17Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ας δούμε και ένα πρόβλημα που μπορεί να προκύψει όταν μία κλάση περιέχει δείκτες που
κάνουν δυναμική διαχείριση μνήμης
• Το πρόβλημα αυτό προκύπτει όταν:
• Έχουμε μία κλάση που κάνει δυναμική δέσμευση μνήμης
• Κάνουμε αντιγραφή του αντικειμένου (π.χ. ob1 = ob2)
• Μεταγλωττίστε και εκτελέστε το ακόλουθο πρόγραμμα:
/* CPP3.assignment_problem Δυναμική Δέσμευση και Τελεστής Ανάθεσης */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
~dummy();
void set_val(int in_val);
int get_val();
private:
int *p_val;
};
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
18Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
int main()
{
dummy ob1;
ob1.set_val(3);
dummy ob2;
ob2 = ob1;
cout<<ob1.get_val()<<endl;
cout<<ob2.get_val()<<endl;
return 0;
}
dummy::dummy()
{
p_val = new int;
if (!p_val) cout<<"Error allocating memory";
cout<<"Constructing...";
}
dummy::~dummy()
{
delete p_val;
cout<<"Destructing...";
}
void dummy::set_val(int in_val)
{
*p_val = in_val;
}
int dummy::get_val()
{
return *p_val;
}
• Σημαντικό! Στη C++ οι μεταβλητές μπορούν να δηλωθούν σε οποιοδήποτε μέρος του
προγράμματος (αλλά θα το αποφεύγουμε…)
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
19Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• H εκτέλεση του προγράμματος οδηγεί σε σφάλμα κατά το χρόνο εκτέλεσης:
• Για να καταλάβουμε γιατί συμβαίνει αυτό, θα δούμε την κατάσταση της μνήμης βήμα – βήμα
κατά την εκτέλεση της main
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
20Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• dummy ob1; // Δεσμεύει το χώρο για το ob1.
• ob1.set_val(3); // αποθηκεύει την τιμή 3 στο χώρο μνήμης
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
21Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• dummy ob2; // Δεσμεύει το χώρο για το ob2.
• ob2=ob1 // Δεν κάνει ακριβώς αυτό που θέλουμε…
A. Θεωρία
3. Κλάσεις που περιέχουν δείκτες
2. …και ένα πρόβλημα (χωρίς λύση για την ώρα)
22Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Τώρα με την ολοκλήρωση του προγράμματος, θα τρέξουν οι δύο destructors.
• Συνεπώς ο ίδιος χώρος μνήμης θα αποδεσμευτεί δύο φορές.
• Και αυτό οδηγεί σε σφάλμα στο χρόνο εκτέλεσης.
• Ενώ ισχύει ότι έχουμε κάνει και το βασικό λάθος
• Με την ολοκλήρωση του προγράμματος, έχει ξεμείνει χώρος μνήμης, τον οποίο
δεσμεύσαμε δυναμικά και δεν τον αποδεσμεύσαμε ποτέ (memory leak)
• Το πρόβλημα αυτό προκύπτει όταν γίνεται bit by bit αντιγραφή αντικειμένων (shallow copy)
• όπως στην περίπτωση που είδαμε,
• αλλά και σε άλλες περιπτώσεις (π.χ. όταν περνάμε ένα αντικείμενο μέσω τιμής σε μία
συνάρτηση)
• Θα αντιμετωπίσουμε το πρόβλημα αυτό, στα επόμενα μαθήματα:
• Θα μάθουμε τις αναφορές (references)
• και μέσω αυτών θα ορίσουμε τον κατασκευαστή αντιγράφου (copy constructor)
• επίσης θα μάθουμε την υπερφόρτωση του =
• και θα ορίσουμε τι πρέπει να γίνεται όταν έχουμε ανάθεση αντικειμένου
A. Θεωρία
4. Δυναμική Δέσμευση Μνήμης για Πίνακες
1. Μονοδιάστατοι Πίνακες
23Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Οι τελεστές new και delete χρησιμοποιούνται και για την δέσμευση μνήμης για πίνακες
• Δέσμευση Μνήμης:
• Η σύνταξη του τελεστή new είναι:
• Δεσμεύει χώρο μνήμης για n αντικείμενα τύπου type και επιστρέφει έναν δείκτη σε αυτόν
το χώρο
• Το n δεν χρειάζεται να είναι σταθερά.
• Αποδέσμευση Μνήμης:
• Η σύνταξη του τελεστή delete είναι:
ptr = new type [n];
delete [] ptr;
• Βλέπουμε και ένα παράδειγμα δέσμευσης μνήμης για έναν πίνακα n ακεραίων.
A. Θεωρία
4. Δυναμική Δέσμευση Μνήμης για Πίνακες
2. Παράδειγμα δέσμευσης μνήμης για μονοδιάστατο πίνακα
24Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.1d_dynamic_array Μονοδιάστατος
πίνακας με δυναμική δέσμευση μνήμης */
#include <iostream>
using namespace std;
int main()
{
int *arr;
int n=4;
/* Δέσμευση Μνήμης */
arr = new int [n];
if (!arr) cout<<"Error allocating memory!";
/* Κάποια δουλειά στον πίνακα */
for (int i=0; i<n; i++)
arr[i]=i*i;
for (int i=0; i<n; i++)
cout<<arr[i]<<" ";
/* Αποδέσμευση Μνήμης */
delete [] arr;
return 0;
}
A. Θεωρία
4. Δυναμική Δέσμευση Μνήμης για Πίνακες
3. Διδιάστατοι Πίνακες
25Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Ένας διδιάστατος ΜxN πίνακας π.χ. ακεραίων είναι:
• ένας πίνακας M δεικτών σε ακέραιο
• όπου κάθε δείκτης είναι ένας πίνακας από N ακεραίους
• Σχηματικά (π.χ. για M=7, N=6):
1 5 2 4 3 2
6 4 6 9 3 4
2 5 9 4 6 2
1 8 9 6 2 3
9 1 5 1 6 7
9 8 4 1 3 5
1 9 7 6 4 2pin[6]
pin[1]
pin[2]
pin[3]
pin[4]
pin[5]
pin[0]
pin
pin[0][4]
pin[3][3]
pin[6][0]
M=7
γραμμές
Ν=6
στήλες
A. Θεωρία
4. Δυναμική Δέσμευση Μνήμης για Πίνακες
3. Διδιάστατοι Πίνακες
26Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
• Από τα παραπάνω:
• Η δέσμευση μνήμης θα γίνει με τις εντολές:
• Προσοχή, ότι το ptr είναι διπλός δείκτης
• αφου θέλουμε να δείχνει στην διεύθυνση μιας μεταβλητής που είναι διεύθυνση
ενός τύπου.
• Συνεπώς θα δηλωθεί ως:
• H αποδέσμευση θα γίνει εντολές:
ptr = new type * [Μ];
for (i=0; i<M; i++)
ptr[i] = new type [N];
type **ptr;
for (i=0; i<M; i++)
delete [] ptr[i];
delete [] ptr;
• Βλέπουμε και ένα παράδειγμα δέσμευσης μνήμης για έναν πίνακα n ακεραίων.
A. Θεωρία
4. Δυναμική Δέσμευση Μνήμης για Πίνακες
4. Παράδειγμα δέσμευσης μνήμης για διδιάστατο πίνακα
27Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
/* CPP3.2d_dynamic_array Διδιάστατος πίνακας με
δυναμική δέσμευση μνήμης */
#include <iostream>
using namespace std;
int main()
{
int **arr;
int i,j, n=3, m=5;
/* Δέσμευση Μνήμης */
arr = new int * [n];
if (!arr) cout<<"Error allocating memory!";
for (i=0; i<n; i++)
{
arr[i] = new int [m];
if (!arr[i]) cout<<"Error allocating memory!";
}
/* Κάποια δουλειά στον πίνακα */
for (i=0; i<n; i++)
for (j=0; j<m; j++)
arr[i][j]=i*j;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
cout<<arr[i][j];
cout<<endl;
}
/* Αποδέσμευση Μνήμης */
for (i=0; i<n; i++)
delete [] arr[i];
delete [] arr;
return 0;
}
Β. Ασκήσεις
Άσκηση 1: Διπλοί Δείκτες
28Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
Για να πειραματιστούμε με τους δείκτες
• Δηλώστε μία ακέραια μεταβλητή x
• Τυπώστε την τιμή και τη διεύθυνσή της
• Δηλώστε έναν δείκτη σε ακέραιο p
• Θέστε τον να δείχνει στην x
• Τυπώστε την τιμή και τη διεύθυνση του
• Τυπώστε την τιμή του x, μέσω του p.
• Δηλώστε έναν δείκτη σε δείκτη σε ακέραιο, με όνομα pp
• Θέστε τον να δείχνει στον p
• Τυπώστε την τιμή και τη διεύθυνσή του
• Τυπώστε την τιμή του x, μέσω του pp.
• Τυπώστε την τιμή του p, μέσω του pp.
Β. Ασκήσεις
Άσκηση 2: Κλάση Δυναμικός Πίνακας
29Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες
Κατασκευάστε μία κλάση (ARRAY) που να περιτυλίσσει την έννοια του μονοδιάστατου πίνακα ως
εξής:
• Να έχει ως μέλη έναν δυναμικό πίνακα (δείκτης) ακεραίων, καθώς και τη διάσταση του πίνακα
• Ο κατασκευαστής να παίρνει ως όρισμα τη διάσταση του πίνακα και να δεσμεύει δυναμικά το
χώρο μνήμης που απαιτείται.
• Ο καταστροφέας να διαγράφει τη μνήμη που έχει δεσμευτεί δυναμικά.
• Να έχει accessors για ένα στοιχείο του πίνακα
• Να τυπώνουν μήνυμα λάθους, σε περίπτωση πρόσβασης εκτός των ορίων του πίνακα.
• Μία μέθοδο print που να τυπώνει τα στοιχείτα του πίνακα
Η συνάρτηση main
• Να κατασκευάζει έναν πίνακα της κλάσης με 10 θέσεις
• Να αρχικοποιεί τα στοιχεία του πίνακα, ώστε κάθε στοιχείο να έχει το τετράγωνο της
αντίστοιχης θέσης.
• Να τυπώνει τον πίνακα.
Ποιο πρόβλημα υπάρχει με την υλοποίηση; Πότε περιμένουμε ότι το πρόγραμμα αυτό θα έχει
πρόβλημα και θα «σκάσει» κατά το χρόνο εκτέλεσης;

More Related Content

What's hot

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
Dimitris Psounis
 
Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)
Katerina Drimili
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Dimitris Psounis
 
Η Γλώσσα C - Μάθημα 2
Η Γλώσσα C - Μάθημα 2Η Γλώσσα C - Μάθημα 2
Η Γλώσσα C - Μάθημα 2
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
Dimitris Psounis
 
Η Γλώσσα C - Μάθημα 3
Η Γλώσσα C - Μάθημα 3 Η Γλώσσα C - Μάθημα 3
Η Γλώσσα C - Μάθημα 3
Dimitris Psounis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Dimitris Psounis
 
Κεφ. 2 Βασικές Έννοιες Αλγορίθμων
Κεφ. 2 Βασικές Έννοιες ΑλγορίθμωνΚεφ. 2 Βασικές Έννοιες Αλγορίθμων
Κεφ. 2 Βασικές Έννοιες ΑλγορίθμωνΙωάννου Γιαννάκης
 
ΑΕΠΠ: 21ο Φύλλο Ασκήσεων
ΑΕΠΠ: 21ο Φύλλο ΑσκήσεωνΑΕΠΠ: 21ο Φύλλο Ασκήσεων
ΑΕΠΠ: 21ο Φύλλο ΑσκήσεωνNikos Michailidis
 
Kef10 a synartiseis
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseis
mnikol
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Dimitris Psounis
 

What's hot (20)

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
 
Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)Aσκήσεις Python (θεωρία)
Aσκήσεις Python (θεωρία)
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
 
Η Γλώσσα C - Μάθημα 2
Η Γλώσσα C - Μάθημα 2Η Γλώσσα C - Μάθημα 2
Η Γλώσσα C - Μάθημα 2
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 18
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
 
Η Γλώσσα C - Μάθημα 3
Η Γλώσσα C - Μάθημα 3 Η Γλώσσα C - Μάθημα 3
Η Γλώσσα C - Μάθημα 3
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
 
Κεφ. 2 Βασικές Έννοιες Αλγορίθμων
Κεφ. 2 Βασικές Έννοιες ΑλγορίθμωνΚεφ. 2 Βασικές Έννοιες Αλγορίθμων
Κεφ. 2 Βασικές Έννοιες Αλγορίθμων
 
ΑΕΠΠ: 21ο Φύλλο Ασκήσεων
ΑΕΠΠ: 21ο Φύλλο ΑσκήσεωνΑΕΠΠ: 21ο Φύλλο Ασκήσεων
ΑΕΠΠ: 21ο Φύλλο Ασκήσεων
 
Kef10 a synartiseis
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
 

Similar to ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Dimitris Psounis
 
Advanced Notes on Pointers
Advanced Notes on PointersAdvanced Notes on Pointers
Advanced Notes on Pointers
jtsagata
 
Python Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή ΕπανάληψηςPython Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή Επανάληψης
Ιωάννου Γιαννάκης
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
Dimitris Psounis
 
Stelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentationStelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentation
ISSEL
 
Python. 1 2 δομή ακολουθίας
Python. 1 2 δομή ακολουθίαςPython. 1 2 δομή ακολουθίας
Python. 1 2 δομή ακολουθίας
Ιωάννου Γιαννάκης
 
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
Dimitris Psounis
 
PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4
Dimitris Psounis
 
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
Pavlos (Παύλος) Avgerinopoulos (Αυγερινόπουλος)
 
ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15
Dimitris Psounis
 
ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2
educast
 
Iterative Structure (Δομή Επανάληψης)
Iterative Structure (Δομή Επανάληψης)Iterative Structure (Δομή Επανάληψης)
Iterative Structure (Δομή Επανάληψης)
Dimitrios Kontogiannis
 
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
Manos Tsardoulias
 
Evangelos papathomas diploma thesis presentation
Evangelos papathomas diploma thesis presentationEvangelos papathomas diploma thesis presentation
Evangelos papathomas diploma thesis presentation
ISSEL
 
5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές
Panagiotis Mastrapas
 
Java_16012024.pdf
Java_16012024.pdfJava_16012024.pdf
Java_16012024.pdf
argideli1
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
leonbont
 
αναπαράσταση αλγορίθμων και δεδομένων
αναπαράσταση αλγορίθμων και δεδομένωναναπαράσταση αλγορίθμων και δεδομένων
αναπαράσταση αλγορίθμων και δεδομένων
MariaProGr
 

Similar to ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (20)

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
 
Advanced Notes on Pointers
Advanced Notes on PointersAdvanced Notes on Pointers
Advanced Notes on Pointers
 
Python Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή ΕπανάληψηςPython Κεφ. 1.4 Δομή Επανάληψης
Python Κεφ. 1.4 Δομή Επανάληψης
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
 
Stelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentationStelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentation
 
Python. 1 2 δομή ακολουθίας
Python. 1 2 δομή ακολουθίαςPython. 1 2 δομή ακολουθίας
Python. 1 2 δομή ακολουθίας
 
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
 
PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4
 
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
Python - Bασικές Aρχές Προγραμματισμού - Κεφ. 3
 
κεφαλαιο 3'
κεφαλαιο 3'κεφαλαιο 3'
κεφαλαιο 3'
 
ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15ΠΛΗ31 ΤΕΣΤ 15
ΠΛΗ31 ΤΕΣΤ 15
 
Exercise3
Exercise3Exercise3
Exercise3
 
ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2
 
Iterative Structure (Δομή Επανάληψης)
Iterative Structure (Δομή Επανάληψης)Iterative Structure (Δομή Επανάληψης)
Iterative Structure (Δομή Επανάληψης)
 
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
Evangelos Papathomas: Semantic Code Search in Software Repositories using Neu...
 
Evangelos papathomas diploma thesis presentation
Evangelos papathomas diploma thesis presentationEvangelos papathomas diploma thesis presentation
Evangelos papathomas diploma thesis presentation
 
5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές
 
Java_16012024.pdf
Java_16012024.pdfJava_16012024.pdf
Java_16012024.pdf
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
αναπαράσταση αλγορίθμων και δεδομένων
αναπαράσταση αλγορίθμων και δεδομένωναναπαράσταση αλγορίθμων και δεδομένων
αναπαράσταση αλγορίθμων και δεδομένων
 

More from Dimitris Psounis

Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Dimitris Psounis
 
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
Dimitris Psounis
 
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Dimitris Psounis
 
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
Dimitris Psounis
 
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
Dimitris Psounis
 
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
Dimitris Psounis
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
Dimitris Psounis
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis
 

More from Dimitris Psounis (20)

Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
 
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
 
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
 
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
 
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
 
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
 
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
 
ΠΛΗ31 - ΤΕΣΤ 33
ΠΛΗ31 - ΤΕΣΤ 33ΠΛΗ31 - ΤΕΣΤ 33
ΠΛΗ31 - ΤΕΣΤ 33
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
 
ΠΛΗ31 ΤΕΣΤ 32
ΠΛΗ31 ΤΕΣΤ 32ΠΛΗ31 ΤΕΣΤ 32
ΠΛΗ31 ΤΕΣΤ 32
 
ΠΛΗ31 ΤΕΣΤ 31
ΠΛΗ31 ΤΕΣΤ 31ΠΛΗ31 ΤΕΣΤ 31
ΠΛΗ31 ΤΕΣΤ 31
 
ΠΛΗ31 ΤΕΣΤ 30
ΠΛΗ31 ΤΕΣΤ 30ΠΛΗ31 ΤΕΣΤ 30
ΠΛΗ31 ΤΕΣΤ 30
 
ΠΛΗ10 ΤΕΣΤ 35
ΠΛΗ10 ΤΕΣΤ 35ΠΛΗ10 ΤΕΣΤ 35
ΠΛΗ10 ΤΕΣΤ 35
 

Recently uploaded

Panelllinies 2024 ekthesi nea ellinika.pdf
Panelllinies 2024 ekthesi nea ellinika.pdfPanelllinies 2024 ekthesi nea ellinika.pdf
Panelllinies 2024 ekthesi nea ellinika.pdf
ssuserf9afe7
 
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptxΕκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
7gymnasiokavalas
 
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα ΕλληνικάΤο θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
athinadimi
 
Όαση ειρήνης
Όαση                                ειρήνηςΌαση                                ειρήνης
Όαση ειρήνης
Dimitra Mylonaki
 
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
3zoh0uxr
 
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
Socratis Vasiopoulos
 
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεωνΑρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
Panagiotis Prentzas
 
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptxΕνημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
7gymnasiokavalas
 
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptxΚυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
Λαμπρινή Μαγαλιού
 
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμόςΤο βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
ΟΛΓΑ ΤΣΕΧΕΛΙΔΟΥ
 
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
athinadimi
 
Η εκδρομή μας στους Δελφούς
Η εκδρομή μας στους                ΔελφούςΗ εκδρομή μας στους                Δελφούς
Η εκδρομή μας στους Δελφούς
Dimitra Mylonaki
 
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptxΈκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
7gymnasiokavalas
 
Activate Communicate Think Democratically Conference Pieria
Activate Communicate Think Democratically Conference PieriaActivate Communicate Think Democratically Conference Pieria
Activate Communicate Think Democratically Conference Pieria
ssuserb87724
 
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdfΣτρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
Lamprini Magaliou
 
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdfΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
2lykkomo
 
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
Basso Hatzopoulou
 
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
ΟΛΓΑ ΤΣΕΧΕΛΙΔΟΥ
 
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησειςΑναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
ΟΛΓΑ ΤΣΕΧΕΛΙΔΟΥ
 
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptxΚαμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
peter190314
 

Recently uploaded (20)

Panelllinies 2024 ekthesi nea ellinika.pdf
Panelllinies 2024 ekthesi nea ellinika.pdfPanelllinies 2024 ekthesi nea ellinika.pdf
Panelllinies 2024 ekthesi nea ellinika.pdf
 
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptxΕκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
Εκπαιδευτική επίσκεψη στο Σεισμολογικό Ινστιτούτο του ΑΠΘ.pptx
 
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα ΕλληνικάΤο θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
Το θέμα που έπεσε στην Έκθεση στα ΕΠΑΛ και ολα τα θέμα στα Νέα Ελληνικά
 
Όαση ειρήνης
Όαση                                ειρήνηςΌαση                                ειρήνης
Όαση ειρήνης
 
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
一比一原版(USYD毕业证书)悉尼大学毕业证成绩单如何办理
 
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
05. Λειτουργία συντήρηση Ομαδα Ε ΓΕΛ Νεσοποταμίας.pptx
 
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεωνΑρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
Αρχές Οικονομικής Θεωρίας - Το γραπτό των πανελλαδικών εξετάσεων
 
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptxΕνημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
Ενημέρωση για την Ενδοσχολική Βία και το Άγχος.pptx
 
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptxΚυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
Κυριτσοπούλου Εβελίνα, ΑΡΧΙΖΕ Μ΄ΕΜΑΣ, βιβλ-ση.pptx
 
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμόςΤο βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
Το βιβλιο του μηδέν.pdf για Α τάξη -μαθηματικά-αριθμός
 
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
ΑΠΑΝΤΗΣΕΙΣ ΕΚΘΕΣΗ ΕΠΑΛ ΓΙΑ ΤΙΣ ΠΑΝΕΛΛΗΝΙΕΣ 2024
 
Η εκδρομή μας στους Δελφούς
Η εκδρομή μας στους                ΔελφούςΗ εκδρομή μας στους                Δελφούς
Η εκδρομή μας στους Δελφούς
 
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptxΈκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
Έκθεση Τεχνολογίας Σχολικό Έτος 2023-24.pptx
 
Activate Communicate Think Democratically Conference Pieria
Activate Communicate Think Democratically Conference PieriaActivate Communicate Think Democratically Conference Pieria
Activate Communicate Think Democratically Conference Pieria
 
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdfΣτρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
Στρ. Μυριβήλης, Τα ζα_κείμενο & σχόλια.pdf
 
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdfΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
ΕΓΚΥΚΛ.-ΠΑΡΑΛ.-ΣΤΗΡΙΞΗΣ-2024-25-ΨΒΣΕ46ΝΚΠΔ-1ΦΤ.pdf
 
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
ΥΛΙΚΟ για Σχολική Διαμεσολάβηση Οκτώβριος 2023-Μάιος 2024
 
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
ΚΑΡΤΕΣ ΑΡΙΘΜΩΝ ΙΧΝΗΛΑΤΗΣΗΣ /ΠΡΟΓΡΑΦΙΚΕΣ ΑΣΚΗΣΕΙΣ
 
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησειςΑναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
Αναμνήσεις σχολικής χρονιάς.pdfΛεύκωμα / σχολικες αναμνησεις
 
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptxΚαμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
Καμμένη Πάρνηθα.bddbdvbdvd d d dddvdvdvpptx
 

ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ

  • 1. H ΓΛΩΣΣΑ C++ Μάθημα 3: Κλάσεις και Δείκτες Δημήτρης Ψούνης
  • 2. Περιεχόμενα Μαθήματος Α. Θεωρία 1. Διαχείριση Μνήμης 1. Στατική Δέσμευση Μνήμης 2. Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές 3. Στατική Δέσμευση Μνήμης για Αντικείμενα 2. Δυναμική Δέσμευση Μνήμης 1. Δείκτες (Υπενθύμιση από C) 2. Οι τελεστές new και delete 3. Δυναμική Δέσμευση για Συνήθεις Μεταβλητές 4. Δυναμική Δέσμευση για Αντικείμενα 5. Δυναμική Δέσμευση και Κατασκευαστές 2Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες 3. Κλάσεις που περιέχουν δείκτες 1. Παράδειγμα κλάσης που περιέχει δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 1. Μονοδιάστατοι πίνακες 2. Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες 3. Διδιάστατοι πίνακες 4. Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες B. Ασκήσεις
  • 3. A. Θεωρία 1. Διαχείριση Μνήμης 1. Στατική και Δυναμική Δέσμευση Μνήμης 3Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Η διαχείριση μνήμης στη C++ γίνεται με παρόμοιο τρόπο με τη C. • Τα παρακάτω είναι εντελώς αντίστοιχα: • Στατική Δέσμευση Μνήμης: • Είναι γνωστός εκ των προτέρων ο χώρος μνήμης που απαιτείται για τα στιγμιότυπα. • Και έχει ήδη αποφασιστεί κατά το χρόνο μεταγλώττισης (π.χ. δηλώνουμε έναν πίνακα 10 θέσεων) • Οι τοπικές μεταβλητές αποθηκεύονται στον χώρο της συνάρτησης (στοίβα – stack) • Δυναμική Δέσμευση Μνήμης: • Δεν είναι γνωστός εκ των προτέρων ο χώρος μνήμης που πρέπει να δεσμεύσει το πρόγραμμά μας. • Αλλά αποφασίζεται κατά το χρόνο εκτέλεσης (π.χ. ο χρήστης αποφασίζει πόσες θέσεις θα έχει ένας πίνακας που χρησιμοποιεί το πρόγραμμα) • Ο χώρος μνήμης που δεσμεύεται δυναμικά είναι κοινός για όλες τις συναρτήσεις (σωρός – heap)
  • 4. A. Θεωρία 1. Διαχείριση Μνήμης 2. Στατική Δέσμευση μνήμης για συνήθεις μεταβλητές 4Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.local_variables.cpp */ #include <iostream> using namespace std; void f() { int y=3; cout<<"inside f"; } int main() { int x=5; cout<<"inside main"; f(); return 0; } • Κάθε συνάρτηση έχει το δικό της χώρο μνήμης. • Κάθε τοπική μεταβλητή αποθηκεύεται στο χώρο μνήμης της συνάρτησης στην οποία ανήκει. • Σχηματικά, για το παράδειγμα: • Αυτός ο χώρος μνήμης καλείται και στοίβα (stack), λόγω του τρόπου με τον οποίο εχει υλοποιηθεί η κλήση των συναρτήσεων σε μία στοίβα: main f
  • 5. A. Θεωρία 1. Διαχείριση Μνήμης 3. Στατική Δέσμευση μνήμης για Αντικείμενα 5Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ένα αντικείμενο αποθηκεύεται στη μνήμη ως εξής: • Τα μέλη του βρίσκονται σε διαδοχικές θέσεις μνήμης • Προσοχή, οι μέθοδοι βρίσκονται σε άλλο χώρο (είναι κοινές για όλα τα αντικείμενα της κλάσης) • Ο τελεστής sizeof μπορεί να χρησιμοποιήθεί για να μετρήσουμε το πλήθος των bytes που χρησιμοποιεί ένα αντικείμενο. • Παράδειγμα: /* CPP3.sizeof.cpp Μέγεθος αντικειμένου */ #include <iostream> using namespace std; class dummy { public: int x; int y; }; int main() { dummy ob; ob.x = 3; ob.y = 5; cout<<sizeof ob<<endl; return 0; } • Θα τυπώσει 8 (δύο ακέραιοι 4bytes ο καθένας) • Και η εικόνα της μνήμης:
  • 6. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 1. Δείκτες (Υπενθύμιση από C) 6Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ένας δείκτης είναι μια μεταβλητή που αποθηκεύει διευθύνσεις μεταβλητών • Ένας δείκτης δηλώνεται ως εξής: • Όπου ΤΔ είναι ένας οποιοσδήποτε τύπος δεδομένων (int, float, double κ.λπ.) • Π.χ. ένας δείκτης σε ακέραιο δηλώνεται με τη δήλωση: • Αποθηκεύουμε σε έναν δείκτη την διεύθυνση μιας μεταβλητής με τη δήλωση: • O τελεστής & επιστρέφει τη διεύθυνση της μεταβλητής στην οποία εφαρμόζεται. • Π.χ. αποθηκεύουμε στον δείκτη ptr τη διεύθυνση μιας μεταβλητής x με την εντολή: • και λέμε «ο δείκτης ptr δείχνει στην μεταβλητή x» ΤΔ *pointer_name; int *ptr; pointer_name = &variable; ptr = &x; • Αναλυτικά βλ. και «Γλώσσα C – Μάθημα 8: Δείκτες»
  • 7. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 1. Δείκτες (Υπενθύμιση από C) 7Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.pointers.cpp */ #include <iostream> using namespace std; int main() { int x=5; int *p = NULL; p = &x; cout<<"x = "<<x<<" (address: "<<&x<<")"<<endl; cout<<"*p = "<<*p<<" (address: "<<p<<")"<<endl; return 0; } • Το πρόγραμμα δείχνει την βασική ιδιότητα: • Για ένα δείκτη (p) που «δείχνει» σε μία μεταβλητη ισχύουν: • To NULL είναι μία ειδική τιμή • που συμβολίζει ότι ο δείκτης δεν δείχνει κάπου. • Είναι καλό ένας δείκτης που δεν δείχνει κάπου να έχει την τιμή NULL • H τιμη του NULL είναι 0. • Σχηματικά: p == &x //Διεύθυνση της x *p == x // Τιμή της x
  • 8. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 2. Οι τελεστές new και delete 8Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ο τελεστής new χρησιμοποιείται για να δεσμεύσει δυναμικά χώρο μνήμης • Αντικαθιστά τη malloc της C. • Η σύνταξη του είναι: • Δεσμεύει χώρο μνήμης για ένα αντικείμενου τύπου type και επιστρέφει έναν δείκτη σε αυτόν το χώρο • Ο χώρος μνήμης που δεσμεύεται δυναμικά, είναι κοινός για όλες τις συναρτήσεις και ονομάζεται σωρός (heap) • Προσοχή, αν αποτύχει η δέσμευση (δεν υπάρχει χώρος) επιστρέφει NULL • και θα πρέπει πάντα να ελέγχουμε ότι η δέσμευση έγινε επιτυχημένα ptr = new type; • Ο τελεστής delete χρησιμοποιείται για να απόδεσμευσει χώρο μνήμης που έχει δεσμευτεί δυναμικά • Αντικαθιστά τη free της C. • Η σύνταξη του είναι: delete ptr;
  • 9. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 2. Οι τελεστές new και delete (Έλεγχος Δέσμευσης Μνήμης) 9Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Πάντα πρέπει να κάνουμε έλεγχο αν η μνήμη που αιτηθήκαμε με τη new, έχει όντως δεσμευτεί. • Βλέπουμε τρεις τρόπους για να «πιάσουμε» το πρόβλημα: • A’ τρόπος: Ο πιο απλός, μιας και απλά ελέγχουμε την επιστρεφόμενη τιμή: • Β’ τρόπος: Πιο ψαγμένος, ξέρουμε ότι το NULL είναι 0 (και για να είμαστε ακριβής (void *) 0) • Και ξέρουμε ότι το 0, είναι το λογικό ψευδές • και το !0 είναι το λογικό αληθές: • Γ’τρόπος: Ο πιο σύνθετος και φαντεζί, αλλά ενσωματώνει τις δύο εντολές σε μία γραμμή: • Στις σημειώσεις θα χρησιμοποιήσουμε κυρίως το Β’ τρόπο • Και θα βγάζουμε απλά ένα ενημερωτικό μήνυμα (αργότερα θα μπορούμε να κάνουμε και περισσότερα πράγματα, με τις εξαιρέσεις της C++) ptr = new type; if (ptr==NULL) { …. do some action… } ptr = new type; if (!ptr) { …. do some action… } if (!(ptr = new type)) { …. do some action… }
  • 10. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 3. Δυναμική Δέσμευση για Συνήθεις Μεταβλητές 10Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Το παράδειγμα δείχνει τη δέσμευση μνήμης για έναν ακέραιο αριθμό, τόσο στατικά όσο και δυναμικά: #include <iostream> // CPP3.dynamic_variable.cpp using namespace std; int main() { int x; // Μεταβλητή που δεσμέυει στατικό χώρο int *p; // Δείκτης σε ακέραιο p = new int; // Δυναμική δέσμευση μνήμης if (!p) cout<<“Error allocating memory”; /* Αναθέσεις τιμών */ x = 1; *p = 5; /* Εκτυπώσεις */ cout<<"x = "<<x<<" (address: "<<&x<<")"<<endl; cout<<"*p = "<<*p<<" (address: "<<p<<")"<<endl; delete p; // Αποδέσμευση μνήμης return 0; } Υπενθυμίσεις από τη C: • Η x δεσμεύει χώρο μνήμης μέσα στο χώρο μνήμης της συνάρτησης • Ο χώρος που δεσμεύεται δυναμικά μέσω της p, είναι ένας ξεχωριστός χώρος, κοινός για όλο το πρόγραμμα • (λέγεται και σωρός – heap) • Σχηματικά:
  • 11. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 4. Δυναμική Δέσμευση για Αντικείμενα 11Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.dynamic_object.cpp Δυναμική Δέσμευση μνήμης για αντικείμενο */ #include <iostream> using namespace std; class dummy { public: int x; }; int main() { dummy *p = NULL; //Θα δείξει σε αντικείμενο p = new dummy; // Δέσμευση χώρου if (!p) cout<<“Error allocating memory”; /* Αναθέσεις τιμών */ p->x = 5; /* Εκτυπώσεις */ cout<<"p->x = "<<p->x<<endl; delete p; // Αποδέσμευση μνήμης return 0; } • Αντίστοιχα (αφού μία κλάση είναι τύπος δεδομένων), μπορεί να δεσμευτεί δυναμικά χώρος μνήμης για ένα αντικείμενο. • Όταν χρησιμοποιούμε ένα αντικείμενο μέσω δείκτη, • Έχουμε πρόσβαση στα δημόσια μέλη-μεθόδους μέσω του τελεστή -> (βελάκι) • Βλέπουμε και ένα παράδειγμα:
  • 12. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 4. Δυναμική Δέσμευση για Αντικείμενα 12Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.dereferencing.cpp */ #include <iostream> using namespace std; class dummy { public: int x; }; int main() { dummy *p = NULL; //Θα δείξει σε αντικείμενο p = new dummy; // Δέσμευση χώρου if (!p) cout<<“Error allocating memory”; /* Αναθέσεις τιμών */ (*p).x = 5; /* Εκτυπώσεις */ cout<<"(*p).x = "<<(*p).x<<endl; delete p; // Αποδέσμευση μνήμης return 0; } • Δεδομένου ενός δείκτη που δείχνει σε ένα αντικείμενο. • Με τον τελεστή *, έχουμε πρόσβαση στο ίδιο το αντικείμενο (dereferencing) • Και ισχύει ότι το (*p) είναι το αντικείμενο στο οποίο δείχνει ο δείκτης. • Συνεπώς έχουμε πρόσβαση στα δημόσια μέλη του (*p) με τον τελεστή . (τελεία) • Βλέπουμε και ένα παράδειγμα:
  • 13. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 4. Δυναμική Δέσμευση για Αντικείμενα 13Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.pointers_and_objects.cpp Δείκτης σε αντικείμενο */ #include <iostream> using namespace std; class dummy { public: int x; }; int main() { dummy ob; dummy *p = &ob; if (!p) cout<<“Error allocating memory”; /* Αναθέσεις τιμών */ ob.x = 6; /* Εκτυπώσεις */ cout<<ob.x<<" "<<p->x<<" "<<(*p).x<<endl; return 0; } • Και ένα ακόμη παράδειγμα, όπου βάζουμε ένα δείκτη να δείχνει σε ένα ήδη υφιστάμενο αντικείμενο: • Για να τονιστεί η διαφορά στην πρόσβαση, • απευθείας από το αντικείμενο (τελεστής .) • μέσω δείκτη (τελεστής ->) • μέσω dereferencing ( * και . )
  • 14. A. Θεωρία 2. Δυναμική Δέσμευση Μνήμης 5. Δυναμική Δέσμευση και κατασκευαστές 14Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Όταν δημιουργούμε ένα αντικείμενο με τον τελεστή new, • και εφόσον το αντικείμενο αυτό έχει κατασκευαστή • πρέπει να περάσουμε και τα ορίσματα στον κατασκευαστή • Ο κατασκευαστής καλείται όταν κάνουμε new • Ο καταστροφέας καλείται όταν κάνουμε delete /* CPP3.constructor_destru ctor.cpp */ #include <iostream> using namespace std; class dummy { public: dummy(int in_x); ~dummy(); private: int x; }; int main() { dummy *p = NULL; p = new dummy(5); //constructing if (!p) cout<<“Error allocating memory”; delete p; //destructing return 0; } dummy::dummy(int in_x) { x = in_x; cout<<"Constructing..."; } dummy::~dummy() { cout<<"Destructing..."; }
  • 15. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 1. Παράδειγμα κλάσης που περιέχει δείκτη 15Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ένας δείκτης είναι απλά μία μεταβλητή • Συνεπώς μπορεί να είναι μέλος σε κλάση • Βλέπουμε ένα απλό παράδειγμα: • Στο οποίο δεσμεύουμε δυναμικά στον κατασκευαστή το χώρο για έναν ακέραιο • και τον αποδεσμεύουμε στον καταστροφέα. /* CPP3.class_with_pointer */ #include <iostream> using namespace std; class dummy { public: dummy(); ~dummy(); void set_val(int in_val); int get_val(); private: int *p_val; };
  • 16. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 1. Παράδειγμα κλάσης που περιέχει δείκτη 16Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες int main() { dummy ob; ob.set_val(3); cout<<endl<<ob.get_val()<<endl; return 0; } dummy::dummy() { p_val = new int; if (!p_val) cout<<"Error allocating memory"; cout<<"Constructing..."; } dummy::~dummy() { delete p_val; cout<<"Destructing..."; } void dummy::set_val(int in_val) { *p_val = in_val; } int dummy::get_val() { return *p_val; }
  • 17. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 17Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ας δούμε και ένα πρόβλημα που μπορεί να προκύψει όταν μία κλάση περιέχει δείκτες που κάνουν δυναμική διαχείριση μνήμης • Το πρόβλημα αυτό προκύπτει όταν: • Έχουμε μία κλάση που κάνει δυναμική δέσμευση μνήμης • Κάνουμε αντιγραφή του αντικειμένου (π.χ. ob1 = ob2) • Μεταγλωττίστε και εκτελέστε το ακόλουθο πρόγραμμα: /* CPP3.assignment_problem Δυναμική Δέσμευση και Τελεστής Ανάθεσης */ #include <iostream> using namespace std; class dummy { public: dummy(); ~dummy(); void set_val(int in_val); int get_val(); private: int *p_val; };
  • 18. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 18Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες int main() { dummy ob1; ob1.set_val(3); dummy ob2; ob2 = ob1; cout<<ob1.get_val()<<endl; cout<<ob2.get_val()<<endl; return 0; } dummy::dummy() { p_val = new int; if (!p_val) cout<<"Error allocating memory"; cout<<"Constructing..."; } dummy::~dummy() { delete p_val; cout<<"Destructing..."; } void dummy::set_val(int in_val) { *p_val = in_val; } int dummy::get_val() { return *p_val; } • Σημαντικό! Στη C++ οι μεταβλητές μπορούν να δηλωθούν σε οποιοδήποτε μέρος του προγράμματος (αλλά θα το αποφεύγουμε…)
  • 19. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 19Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • H εκτέλεση του προγράμματος οδηγεί σε σφάλμα κατά το χρόνο εκτέλεσης: • Για να καταλάβουμε γιατί συμβαίνει αυτό, θα δούμε την κατάσταση της μνήμης βήμα – βήμα κατά την εκτέλεση της main
  • 20. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 20Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • dummy ob1; // Δεσμεύει το χώρο για το ob1. • ob1.set_val(3); // αποθηκεύει την τιμή 3 στο χώρο μνήμης
  • 21. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 21Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • dummy ob2; // Δεσμεύει το χώρο για το ob2. • ob2=ob1 // Δεν κάνει ακριβώς αυτό που θέλουμε…
  • 22. A. Θεωρία 3. Κλάσεις που περιέχουν δείκτες 2. …και ένα πρόβλημα (χωρίς λύση για την ώρα) 22Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Τώρα με την ολοκλήρωση του προγράμματος, θα τρέξουν οι δύο destructors. • Συνεπώς ο ίδιος χώρος μνήμης θα αποδεσμευτεί δύο φορές. • Και αυτό οδηγεί σε σφάλμα στο χρόνο εκτέλεσης. • Ενώ ισχύει ότι έχουμε κάνει και το βασικό λάθος • Με την ολοκλήρωση του προγράμματος, έχει ξεμείνει χώρος μνήμης, τον οποίο δεσμεύσαμε δυναμικά και δεν τον αποδεσμεύσαμε ποτέ (memory leak) • Το πρόβλημα αυτό προκύπτει όταν γίνεται bit by bit αντιγραφή αντικειμένων (shallow copy) • όπως στην περίπτωση που είδαμε, • αλλά και σε άλλες περιπτώσεις (π.χ. όταν περνάμε ένα αντικείμενο μέσω τιμής σε μία συνάρτηση) • Θα αντιμετωπίσουμε το πρόβλημα αυτό, στα επόμενα μαθήματα: • Θα μάθουμε τις αναφορές (references) • και μέσω αυτών θα ορίσουμε τον κατασκευαστή αντιγράφου (copy constructor) • επίσης θα μάθουμε την υπερφόρτωση του = • και θα ορίσουμε τι πρέπει να γίνεται όταν έχουμε ανάθεση αντικειμένου
  • 23. A. Θεωρία 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 1. Μονοδιάστατοι Πίνακες 23Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Οι τελεστές new και delete χρησιμοποιούνται και για την δέσμευση μνήμης για πίνακες • Δέσμευση Μνήμης: • Η σύνταξη του τελεστή new είναι: • Δεσμεύει χώρο μνήμης για n αντικείμενα τύπου type και επιστρέφει έναν δείκτη σε αυτόν το χώρο • Το n δεν χρειάζεται να είναι σταθερά. • Αποδέσμευση Μνήμης: • Η σύνταξη του τελεστή delete είναι: ptr = new type [n]; delete [] ptr;
  • 24. • Βλέπουμε και ένα παράδειγμα δέσμευσης μνήμης για έναν πίνακα n ακεραίων. A. Θεωρία 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 2. Παράδειγμα δέσμευσης μνήμης για μονοδιάστατο πίνακα 24Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.1d_dynamic_array Μονοδιάστατος πίνακας με δυναμική δέσμευση μνήμης */ #include <iostream> using namespace std; int main() { int *arr; int n=4; /* Δέσμευση Μνήμης */ arr = new int [n]; if (!arr) cout<<"Error allocating memory!"; /* Κάποια δουλειά στον πίνακα */ for (int i=0; i<n; i++) arr[i]=i*i; for (int i=0; i<n; i++) cout<<arr[i]<<" "; /* Αποδέσμευση Μνήμης */ delete [] arr; return 0; }
  • 25. A. Θεωρία 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 3. Διδιάστατοι Πίνακες 25Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Ένας διδιάστατος ΜxN πίνακας π.χ. ακεραίων είναι: • ένας πίνακας M δεικτών σε ακέραιο • όπου κάθε δείκτης είναι ένας πίνακας από N ακεραίους • Σχηματικά (π.χ. για M=7, N=6): 1 5 2 4 3 2 6 4 6 9 3 4 2 5 9 4 6 2 1 8 9 6 2 3 9 1 5 1 6 7 9 8 4 1 3 5 1 9 7 6 4 2pin[6] pin[1] pin[2] pin[3] pin[4] pin[5] pin[0] pin pin[0][4] pin[3][3] pin[6][0] M=7 γραμμές Ν=6 στήλες
  • 26. A. Θεωρία 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 3. Διδιάστατοι Πίνακες 26Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες • Από τα παραπάνω: • Η δέσμευση μνήμης θα γίνει με τις εντολές: • Προσοχή, ότι το ptr είναι διπλός δείκτης • αφου θέλουμε να δείχνει στην διεύθυνση μιας μεταβλητής που είναι διεύθυνση ενός τύπου. • Συνεπώς θα δηλωθεί ως: • H αποδέσμευση θα γίνει εντολές: ptr = new type * [Μ]; for (i=0; i<M; i++) ptr[i] = new type [N]; type **ptr; for (i=0; i<M; i++) delete [] ptr[i]; delete [] ptr;
  • 27. • Βλέπουμε και ένα παράδειγμα δέσμευσης μνήμης για έναν πίνακα n ακεραίων. A. Θεωρία 4. Δυναμική Δέσμευση Μνήμης για Πίνακες 4. Παράδειγμα δέσμευσης μνήμης για διδιάστατο πίνακα 27Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες /* CPP3.2d_dynamic_array Διδιάστατος πίνακας με δυναμική δέσμευση μνήμης */ #include <iostream> using namespace std; int main() { int **arr; int i,j, n=3, m=5; /* Δέσμευση Μνήμης */ arr = new int * [n]; if (!arr) cout<<"Error allocating memory!"; for (i=0; i<n; i++) { arr[i] = new int [m]; if (!arr[i]) cout<<"Error allocating memory!"; } /* Κάποια δουλειά στον πίνακα */ for (i=0; i<n; i++) for (j=0; j<m; j++) arr[i][j]=i*j; for (i=0; i<n; i++) { for (j=0; j<m; j++) cout<<arr[i][j]; cout<<endl; } /* Αποδέσμευση Μνήμης */ for (i=0; i<n; i++) delete [] arr[i]; delete [] arr; return 0; }
  • 28. Β. Ασκήσεις Άσκηση 1: Διπλοί Δείκτες 28Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες Για να πειραματιστούμε με τους δείκτες • Δηλώστε μία ακέραια μεταβλητή x • Τυπώστε την τιμή και τη διεύθυνσή της • Δηλώστε έναν δείκτη σε ακέραιο p • Θέστε τον να δείχνει στην x • Τυπώστε την τιμή και τη διεύθυνση του • Τυπώστε την τιμή του x, μέσω του p. • Δηλώστε έναν δείκτη σε δείκτη σε ακέραιο, με όνομα pp • Θέστε τον να δείχνει στον p • Τυπώστε την τιμή και τη διεύθυνσή του • Τυπώστε την τιμή του x, μέσω του pp. • Τυπώστε την τιμή του p, μέσω του pp.
  • 29. Β. Ασκήσεις Άσκηση 2: Κλάση Δυναμικός Πίνακας 29Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 3: Κλάσεις και Δείκτες Κατασκευάστε μία κλάση (ARRAY) που να περιτυλίσσει την έννοια του μονοδιάστατου πίνακα ως εξής: • Να έχει ως μέλη έναν δυναμικό πίνακα (δείκτης) ακεραίων, καθώς και τη διάσταση του πίνακα • Ο κατασκευαστής να παίρνει ως όρισμα τη διάσταση του πίνακα και να δεσμεύει δυναμικά το χώρο μνήμης που απαιτείται. • Ο καταστροφέας να διαγράφει τη μνήμη που έχει δεσμευτεί δυναμικά. • Να έχει accessors για ένα στοιχείο του πίνακα • Να τυπώνουν μήνυμα λάθους, σε περίπτωση πρόσβασης εκτός των ορίων του πίνακα. • Μία μέθοδο print που να τυπώνει τα στοιχείτα του πίνακα Η συνάρτηση main • Να κατασκευάζει έναν πίνακα της κλάσης με 10 θέσεις • Να αρχικοποιεί τα στοιχεία του πίνακα, ώστε κάθε στοιχείο να έχει το τετράγωνο της αντίστοιχης θέσης. • Να τυπώνει τον πίνακα. Ποιο πρόβλημα υπάρχει με την υλοποίηση; Πότε περιμένουμε ότι το πρόγραμμα αυτό θα έχει πρόβλημα και θα «σκάσει» κατά το χρόνο εκτέλεσης;