SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
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 θέσεις
• Να αρχικοποιεί τα στοιχεία του πίνακα, ώστε κάθε στοιχείο να έχει το τετράγωνο της
αντίστοιχης θέσης.
• Να τυπώνει τον πίνακα.
Ποιο πρόβλημα υπάρχει με την υλοποίηση; Πότε περιμένουμε ότι το πρόγραμμα αυτό θα έχει
πρόβλημα και θα «σκάσει» κατά το χρόνο εκτέλεσης;

Mais conteúdo relacionado

Mais procurados

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣDimitris Psounis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣDimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 Dimitris Psounis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 Dimitris Psounis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥDimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11Dimitris Psounis
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑDimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥDimitris Psounis
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ Dimitris Psounis
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3Dimitris Psounis
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝDimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣDimitris Psounis
 

Mais procurados (20)

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 7 - ΠΙΝΑΚΕΣ
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 10
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 16 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΞΟΔΟΥ (ΕΚΤΥΠΩΣΗ)
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ (ΕΚΤΥΠΩΣΗ)
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 11
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 1 - ΔΙΑΠΕΡΑΣΗ ΠΙΝΑΚΑ
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
 
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 3
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
 
ΠΛΗ30 ΜΑΘΗΜΑ 1.1
ΠΛΗ30 ΜΑΘΗΜΑ 1.1ΠΛΗ30 ΜΑΘΗΜΑ 1.1
ΠΛΗ30 ΜΑΘΗΜΑ 1.1
 
ΠΛΗ20 ΜΑΘΗΜΑ 3.7
ΠΛΗ20 ΜΑΘΗΜΑ 3.7ΠΛΗ20 ΜΑΘΗΜΑ 3.7
ΠΛΗ20 ΜΑΘΗΜΑ 3.7
 
ΠΛΗ30 ΜΑΘΗΜΑ 6.1
ΠΛΗ30 ΜΑΘΗΜΑ 6.1ΠΛΗ30 ΜΑΘΗΜΑ 6.1
ΠΛΗ30 ΜΑΘΗΜΑ 6.1
 
ΠΛΗ20 ΜΑΘΗΜΑ 3.2
ΠΛΗ20 ΜΑΘΗΜΑ 3.2ΠΛΗ20 ΜΑΘΗΜΑ 3.2
ΠΛΗ20 ΜΑΘΗΜΑ 3.2
 

Semelhante a ΓΛΩΣΣΑ 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 Pointersjtsagata
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8Dimitris Psounis
 
Stelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentationStelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentationISSEL
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Dimitris Psounis
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑDimitris Psounis
 
ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2ΑΕΠΠ ΚΕΦ 2
ΑΕΠΠ ΚΕΦ 2educast
 
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 presentationISSEL
 
5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητέςPanagiotis Mastrapas
 
Java_16012024.pdf
Java_16012024.pdfJava_16012024.pdf
Java_16012024.pdfargideli1
 

Semelhante a ΓΛΩΣΣΑ 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 δομή ακολουθίας
 
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
 
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5ΠΛΗ31 ΜΑΘΗΜΑ 3.5
ΠΛΗ31 ΜΑΘΗΜΑ 3.5
 
PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4PROLOG - ΜΑΘΗΜΑ 4
PROLOG - ΜΑΘΗΜΑ 4
 
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
 
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
 

Mais de 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 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6Dimitris Psounis
 
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5Dimitris 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.2Dimitris 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.1Dimitris Psounis
 
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7Dimitris 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
 

Mais de 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
 

Último

Επίσκεψη στο 11ο Γυμνάσιο Πάτρας
Επίσκεψη              στο 11ο Γυμνάσιο ΠάτραςΕπίσκεψη              στο 11ο Γυμνάσιο Πάτρας
Επίσκεψη στο 11ο Γυμνάσιο ΠάτραςDimitra Mylonaki
 
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξεις
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξειςΓιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξεις
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξειςΟΛΓΑ ΤΣΕΧΕΛΙΔΟΥ
 
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑ
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑΜια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑ
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑDimitra Mylonaki
 
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptxΠασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx36dimperist
 
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της ΙταλίαςKonstantina Katirtzi
 
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptxΠασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx36dimperist
 
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptxAthina Tziaki
 
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ 2008
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ  2008Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ  2008
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ 2008Θεόδωρος Μαραγκούλας
 
Επίσκεψη στο 10ο Γυμνάσιο Πάτρας
Επίσκεψη          στο 10ο Γυμνάσιο ΠάτραςΕπίσκεψη          στο 10ο Γυμνάσιο Πάτρας
Επίσκεψη στο 10ο Γυμνάσιο ΠάτραςDimitra Mylonaki
 
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptxΠασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx36dimperist
 
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docx
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docxΗ Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docx
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docxeucharis
 
Επίσκεψη στο 12ο Γυμνάσιο Πάτρας
Επίσκεψη          στο 12ο Γυμνάσιο ΠάτραςΕπίσκεψη          στο 12ο Γυμνάσιο Πάτρας
Επίσκεψη στο 12ο Γυμνάσιο ΠάτραςDimitra Mylonaki
 
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOY
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOYEKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOY
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOYssuser369a35
 
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2ο
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2οΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2ο
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2οΧρύσα Παπακωνσταντίνου
 
Σουρεαλιστικά ταξίδια μέσα από την τέχνη
Σουρεαλιστικά ταξίδια μέσα από την τέχνηΣουρεαλιστικά ταξίδια μέσα από την τέχνη
Σουρεαλιστικά ταξίδια μέσα από την τέχνηTheodora Chandrinou
 
Μαθητικές καταλήψεις
Μαθητικές                                  καταλήψειςΜαθητικές                                  καταλήψεις
Μαθητικές καταλήψειςDimitra Mylonaki
 

Último (18)

Επίσκεψη στο 11ο Γυμνάσιο Πάτρας
Επίσκεψη              στο 11ο Γυμνάσιο ΠάτραςΕπίσκεψη              στο 11ο Γυμνάσιο Πάτρας
Επίσκεψη στο 11ο Γυμνάσιο Πάτρας
 
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξεις
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξειςΓιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξεις
Γιορτή της μητέρας-Φύλλα εργασιών για όλες τις τάξεις
 
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑ
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑΜια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑ
Μια νύχτα σε κατάστημα παιχνιδιώνΚΕΙΜΕΝΑ
 
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptxΠασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
Πασχαλινές λαμπάδες από τη Δ΄ τάξη του σχολείου μας.pptx
 
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας
2η Διεθνική Συνάντηση μαθητών και καθηγητών στο Σαλέρνο της Ιταλίας
 
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptxΠασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx
Πασχαλινές Λαμπάδες από ΣΤ τάξη του σχολείου μας.pptx
 
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx
5ο Κεφάλαιο - Το Λογισμικό του Υπολογιστή.pptx
 
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ 2008
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ  2008Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ  2008
Η ΑΔΙΚΕΙΑ ΤΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΑΣΕΠ ΕΚΠΑΙΔΕΥΤΙΚΩΝ 2008
 
ΙΣΤΟΡΙΑ Α΄ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024
ΙΣΤΟΡΙΑ Α΄ΓΥΜΝΑΣΙΟΥ  : ΕΠΑΝΑΛΗΨΗ 2024ΙΣΤΟΡΙΑ Α΄ΓΥΜΝΑΣΙΟΥ  : ΕΠΑΝΑΛΗΨΗ 2024
ΙΣΤΟΡΙΑ Α΄ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024
 
Επίσκεψη στο 10ο Γυμνάσιο Πάτρας
Επίσκεψη          στο 10ο Γυμνάσιο ΠάτραςΕπίσκεψη          στο 10ο Γυμνάσιο Πάτρας
Επίσκεψη στο 10ο Γυμνάσιο Πάτρας
 
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptxΠασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx
Πασχαλινά αυγά από τη Β΄ τάξη του σχολείου μας.pptx
 
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docx
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docxΗ Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docx
Η Κινέζικη Αστρολογία - Ημερολόγιο - Ζώδια.docx
 
Επίσκεψη στο 12ο Γυμνάσιο Πάτρας
Επίσκεψη          στο 12ο Γυμνάσιο ΠάτραςΕπίσκεψη          στο 12ο Γυμνάσιο Πάτρας
Επίσκεψη στο 12ο Γυμνάσιο Πάτρας
 
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOY
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOYEKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOY
EKSETASTEA KAI DIDAKTEA YLH G TAKSHS GENIKOY LYKEIOY
 
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2ο
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2οΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2ο
ΙΣΤΟΡΙΑ Α' ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΑΣΚΗΣΕΙΣ ΜΕΡΟΣ 2ο
 
Σουρεαλιστικά ταξίδια μέσα από την τέχνη
Σουρεαλιστικά ταξίδια μέσα από την τέχνηΣουρεαλιστικά ταξίδια μέσα από την τέχνη
Σουρεαλιστικά ταξίδια μέσα από την τέχνη
 
ΙΣΤΟΡΙΑ Γ΄ ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024
ΙΣΤΟΡΙΑ Γ΄ ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024ΙΣΤΟΡΙΑ Γ΄ ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024
ΙΣΤΟΡΙΑ Γ΄ ΓΥΜΝΑΣΙΟΥ : ΕΠΑΝΑΛΗΨΗ 2024
 
Μαθητικές καταλήψεις
Μαθητικές                                  καταλήψειςΜαθητικές                                  καταλήψεις
Μαθητικές καταλήψεις
 

ΓΛΩΣΣΑ 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 θέσεις • Να αρχικοποιεί τα στοιχεία του πίνακα, ώστε κάθε στοιχείο να έχει το τετράγωνο της αντίστοιχης θέσης. • Να τυπώνει τον πίνακα. Ποιο πρόβλημα υπάρχει με την υλοποίηση; Πότε περιμένουμε ότι το πρόγραμμα αυτό θα έχει πρόβλημα και θα «σκάσει» κατά το χρόνο εκτέλεσης;