Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ

Dimitris Psounis
Dimitris PsounisTeacher & Manager at Δημήτρης Ψούνης - Υπηρεσίες Εκπαίδευσης à www.psounis.gr
H ΓΛΩΣΣΑ C++
Μάθημα 4:
Κλάσεις και Αναφορές
Δημήτρης Ψούνης
Περιεχόμενα Μαθήματος
Α. Θεωρία
1. Αναφορές
1. Τι είναι αναφορά
2. Παράδειγμα χρήσης αναφοράς
3. ...και το πιο συνηθισμένο λάθος
2. Αναφορές και Συναρτήσεις
1. Διοχέτευση ορίσματος μέσω τιμής
(by value)
2. Διοχέτευση ορίσματος μέσω δείκτη
(by pointer)
3. Διοχέτευση ορίσματος μέσω
αναφοράς (by reference)
2Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
3. Κατασκευαστής αντιγράφου
1. Αντίγραφα Αντικειμένων
2. Ορισμός Κατασκευαστή Αντιγράφου
(copy constructor)
3. Κλήση όταν διοχετεύεται αντικείμενο σε
συνάρτηση μέσω τιμής
4. Επιστροφη αντικειμένου από
συνάρτηση μέσω τιμής
5. Δήλωση και αρχικοποίηση μέσω άλλου
αντικειμένου Ασκήσεις
Β. Ασκήσεις
A. Θεωρία
1. Αναφορές
1. Τι είναι αναφορά
3Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Οι αναφορές είναι ένα νέο στοιχείο της C++
• Η δήλωση μιας αναφοράς:
• Πρέπει να συνοδευεται από την μεταβλητή, της οποίας θα είναι συνώνυμο.
• Στην δήλωση, το & πρέπει να προηγείται του ονόματος της αναφοράς
• Παράδειγμα μιας αναφοράς ref στην ακέραια μεταβλητή x:
• Και πλέον όταν γράφουμε ref είναι σαν να γράφουμε x.
• Προσοχή!
• Η αναφορά δεν είναι ανεξάρτητη από τη μεταβλητή στην οποία αναφέρεται.
• Δεν έχει κάποια ανεξάρτητη διεύθυνση, κάτι που να μοιάζει με δείκτη, ή οτιδήποτε άλλο.
• Σχηματικά το απεικονίζουμε:
• Η αναφορά (reference) είναι ένα συνώνυμο (alias) μιας μεταβλητής.
int &ref = x;
• Κάποιοι προγραμματιστές προτιμούν να γράφουν την δήλωση ως: int& ref;
A. Θεωρία
1. Αναφορές
2. Παράδειγμα χρήσης αναφοράς
4Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Βλέπουμε και ένα απλό παράδειγμα επίδειξης της χρήσης της αναφοράς:
/* cpp4.reference.cpp Χρήση αναφοράς */
#include <iostream>
using namespace std;
int main()
{
int x = 3;
int &r = x;
cout<<"x="<<x<<" r="<<r<<endl;
x=4;
cout<<"x="<<x<<" r="<<r<<endl;
r=5;
cout<<"x="<<x<<" r="<<r<<endl;
return 0;
}
A. Θεωρία
1. Αναφορές
3. ...και το πιο συνηθισμένο λάθος!
5Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• O ακόλουθος κώδικας δεν κάνει αυτό που θέλει ο προγραμματιστής (βλ. σχόλια):
• Προσοχή: Η αναφορά σχετίζεται αποκλειστικά με την μεταβλητή για την οποία δηλώθηκε
αρχικά.
/* cpp4.reference_mistake.cpp Συνηθισμένο λάθος στις αναφορές */
#include <iostream>
using namespace std;
int main()
{
int x = 3, y=4;
int &r = x;
cout<<"r="<<r<<endl;
r=y; // Προσπαθεί να αλλάξει την αναφορά σε άλλη μεταβλητή
cout<<"x="<<x<<endl; // Άλλαξε όμως το x
return 0;
}
A. Θεωρία
2. Αναφορές και Συναρτήσεις
1. Διοχέτευση ορίσματος μέσω τιμής (by value)
6Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Να κάνουμε μία κλάσική υπενθύμιση από τη C, για τον τρόπο που διοχετεύουμε ορίσματα σε
συναρτήσεις:
• O 1ος τρόπος είναι μέσω τιμής, όπου ξέρουμε ότι οι αλλαγές που γίνονται στη συνάρτηση, δεν
διατηρούνται έξω από αυτήν:
• H έξοδος είναι:
• Πολύ αναλυτική εξήγηση στο παράδειγμα, στο «Γλώσσα C: Μάθημα 8: Δείκτες»
/*cpp4.byvalue.cpp: Πέρασμα ορίσματος μέσω
τιμής */
#include <iostream>
using namespace std;
void change(int vA);
int main()
{
int a=1;
cout<<"main: a="<<a<<endl;
change(a);
cout<<"main: a="<<a<<endl;
return 0;
}
void change(int vA)
{
vA=2;
cout<<"change: vA="<<vA<<endl;
}
A. Θεωρία
2. Αναφορές και Συναρτήσεις
2. Διοχέτευση ορίσματος μέσω δείκτη (by pointer)
7Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• O 2ος τρόπος είναι μέσω δείκτη, όπου ξέρουμε ότι οι αλλαγές που γίνονται στη συνάρτηση,
διατηρούνται έξω από αυτήν:
• H έξοδος είναι:
/*cpp4.bypointer.cpp: Πέρασμα ορίσματος μέσω
δείκτη */
#include <iostream>
using namespace std;
void change(int *pA);
int main()
{
int a=1;
cout<<"main: a="<<a<<endl;
change(&a);
cout<<"main: a="<<a<<endl;
return 0;
}
void change(int *pA)
{
*pA=2;
cout<<"change: *pA="<<*pA<<endl;
}
• Στη C ο τρόπος αναφέρεται και «by reference», αλλά στη C++ αναφέρεται «by pointer»
A. Θεωρία
2. Αναφορές και Συναρτήσεις
3. Διοχέτευση ορίσματος μέσω αναφοράς (by reference)
8Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• O 3ος τρόπος είναι μέσω αναφοράς (νέος τρόπος)
• Ο ορισμός της συνάρτησης έχει αναφορά:
• Παρατηρήσεις:
• Διοχετεύοντας αναφορά, δεν δημιουργείται αντίγραφο του ορίσματος, άρα με έμμεσο
τρόπο διοχετεύεται η ίδια η μεταβλητή.
• Συνεπώς οι αλλαγές που γίνονται σε αυτήν διατηρούνται και εκτός της συνάρτησης.
• Μέσα στη συνάρτηση, η χρηση της μεταβλητής είναι πιο «εύκολη» από την διαχείριση
που κάνουμε όταν διοχετεύουμε το όρισμα μέσω δείκτη.
void change(int &rA)
{
rA=2;
cout<<"change: rA="<<rA<<endl;
}
A. Θεωρία
2. Αναφορές και Συναρτήσεις
3. Διοχέτευση ορίσματος μέσω αναφοράς (by reference)
9Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Ολοκληρωμένο το πρόγραμμα είναι:
• Οι αναφορές λοιπόν κάνουν πιο εύκολη τη ζωή μας σε σχέση με τη διαχείριση δεικτών:
• Ένας καλός κανόνας είναι
• «Χρησιμοποίησε αναφορές όποτε μπορείς και δείκτες όποτε πρέπει» ©
/*cpp4.byreference.cpp: Πέρασμα ορίσματος μέσω
αναφοράς */
#include <iostream>
using namespace std;
void change(int &rA);
int main()
{
int a=1;
cout<<"main: a="<<a<<endl;
change(a);
cout<<"main: a="<<a<<endl;
return 0;
}
void change(int &rA)
{
rA=2;
cout<<"change: rA="<<rA<<endl;
}
© www.geeksforgeeks.org
A. Θεωρία
3. Κατασκευαστής αντιγράφου
1. Αντίγραφα Αντικειμένων
10Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Όταν διοχετεύουμε σε συνάρτηση όρισμα το οποίο είναι αντικείμενο, μέσω τιμής:
• Δημιουργείται αντίγραφο του αντικειμένου (όπως γίνεται και με τις απλές μεταβλητές)
• Βλέπουμε ένα παράδειγμα:
/*cpp4.copy_arg_by_value.c
pp: Δημιουργία αντιγράφου
όταν αντικείμενο
διοχετεύεται ως όρισμα */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
~dummy();
int x;
};
void f(dummy ob);
int main()
{
dummy d;
// καλείται ο constructor
f(d);
return 0;
}
dummy::dummy()
{
cout<<"Constructing..."<<endl;
}
dummy::~dummy()
{
cout<<"Destructing..."<<endl;
}
void f(dummy ob)
{
// το όρισμα είναι αντίγραφο
// καταστρέφεται το αντίγραφο
}
A. Θεωρία
3. Κατασκευαστής αντιγράφου
1. Αντίγραφα Αντικειμένων
11Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Εκτελώντας το πρόγραμμα έχουμε την εκτύπωση:
• Εξήγηση:
• Main:
• Δήλωση του αντικειμένου d (καλείται ο constructor).
• Κλήση f(d):
• Δημιουργείται αντίγραφο bit by bit (δεν καλείται constructor), αφού το όρισμα είναι
μέσω τιμής.
• Με την ολοκλήρωση της συνάρτησης, καταστρέφεται το αντίγραφo
• Συνέχεια της main
• Καταστρέφεται το αντικείμενο d
Αντίστοιχες καταστάσεις μπορεί να συμβούν π.χ. όταν:
• Επιστρέφουμε ένα αντικείμενο σε μία συνάρτηση μέσω τιμής (όχι δείκτη ή αναφορά)
Για τις περιπτώσεις αυτές (και άλλες), η C++ ορίζει μια προγραμματιστική ευκολία:
• Τον κατασκευαστή αντιγράφων (copy constructor)
A. Θεωρία
3. Κατασκευαστής αντιγράφου
2. Ορισμός Κατασκευαστή Αντιγράφου (copy constructor)
12Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Για την αποφυγή παρόμοιων προβλημάτων,
• Μπορούμε να ορίσουμε έναν ειδικό κατασκευαστή, τον κατασκευαστή αντιγράφου.
• Η δήλωση του κατασκευαστή αντιγράφου γίνεται ως εξής:
• Τον καλεί το νέο αντικείμενο (αντίγραφό) που κατασκευάζεται
• Το όρισμα που δέχεται είναι το αντικείμενο μέσω του οποίου αρχικοποιείται.
• Θα δούμε αναλυτικά τις τρεις περιπτώσεις
• Ο κατασκευαστής αντιγράφου καλείται αυτόματα όταν:
1. Διοχετεύουμε ως όρισμα μέσω τιμής (by value) ένα αντικείμενο
2. Επιστρέφουμε μέσω τιμής (by value) ένα αντικείμενο
3. Γίνεται δήλωση και αρχικοποίηση ενός αντικειμένου, μέσω ενός άλλου αντικειμένου
class_name(const class_name &ob)
A. Θεωρία
3. Κατασκευαστής αντιγράφου
3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής
13Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Περίπτωση 1: Διοχέτευση αντικειμένου σε συνάρτηση μέσω τιμής
• Στο ακόλουθο παράδειγμα
• Κατασκευάζουμε τον copy constructor στην κλάση
• Βλέπουμε τι γίνεται όταν διοχετεύουμε αντικείμενο της κλάσης μέσω τιμής.
/*cpp4.copy_constructor_arg_by_value.cpp: Copy Constructor: Όρισμα μέσω τιμής */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
dummy(const dummy &ob);
~dummy();
int x;
};
void f(dummy arg);
A. Θεωρία
3. Κατασκευαστής αντιγράφου
3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής
14Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
int main()
{
dummy d;
cout<<"Main: Before calling f"<<endl;
f(d);
cout<<"Main: After calling f"<<endl;
return 0;
}
dummy::dummy()
{
cout<<"Constructing..."<<endl;
x=0;
}
dummy::dummy(const dummy &ob)
{
cout<<"Copy constructor..."<<endl;
x=ob.x;
}
dummy::~dummy()
{
cout<<"Destructing…"<<endl;
}
void f(dummy arg)
{
cout<<"In function..."<<endl;
}
A. Θεωρία
3. Κατασκευαστής αντιγράφου
3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής
15Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Το πρόγραμμα εκτυπώνει:
• Στην main:
• Κατασκευάζεται το αντικείμενο x
• Καλείται η συνάρτηση f
• Κατασκευάζεται το αντίγραφο μέσω του copy constructor
• καλείται από το αντίγραφο (ob) με όρισμα το αντικείμενο (x)
• Σαν να τρέχει η εντολή οb(x)
• Διοχετεύεται ως όρισμα
• Ολοκληρώνεται η εκτέλεση της συνάρτησης
• Καταστρέφεται το αντίγραφο
• Ολοκληρώνεται η main
• Καταστρέφεται το αντικείμενο x
A. Θεωρία
3. Κατασκευαστής αντιγράφου
4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής
16Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Περίπτωση 2: Επιστροφή αντικειμένου από συνάρτηση μέσω τιμής
• Στο ακόλουθο παράδειγμα
• Κατασκευάζουμε τον copy constructor στην κλάση
• Βλέπουμε τι γίνεται όταν επιστρέφουμε αντικείμενο της κλάσης μέσω τιμής.
/*cpp4.copy_constructor_return_ob.cpp: Copy Constructor: Επιστροφή αντικειμένου */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
dummy(const dummy &ob);
~dummy();
int x;
};
dummy f();
A. Θεωρία
3. Κατασκευαστής αντιγράφου
4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής
17Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
int main()
{
cout<<"Main: Before calling f"<<endl;
f();
cout<<"Main: After calling f"<<endl;
return 0;
}
dummy::dummy()
{
cout<<"Constructing..."<<endl;
x=0;
}
dummy::dummy(const dummy &ob)
{
cout<<"Copy constructor..."<<endl;
x=ob.x;
}
dummy::~dummy()
{
cout<<"Destructing..."<<endl;
}
dummy f()
{
dummy ob;
cout<<"In function..."<<endl;
return ob;
}
A. Θεωρία
3. Κατασκευαστής αντιγράφου
4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής
18Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Το πρόγραμμα εκτυπώνει:
• Δεν βλέπουμε τον copy constructor!
• Ωστόσο σε άλλο μεταγλωττιστή είναι δυνατόν να δούμε κλήση copy constructor στην
περίπτωση αυτή.
• Μετά την κλήση της συνάρτησης, θα βλέπαμε την κατασκευή ενός προσωρινού
αντικειμένου το οποίο θα ήταν το αποτέλεσμα της κλήσης της συνάρτησης.
Ο onlineGDB έχει υλοποιήσει μία βελτιστοποίηση ειδικά για την περίπτωση αυτή (αναφέρεται ως: return value
optimization)
• και δεν κατασκευάζει αντίγραφο.
• Ωστόσο σε άλλους μεταγλωττιστές ενδέχεται αυτή η βελτιστοποίηση να μην έχει υλοποιηθεί.
A. Θεωρία
3. Κατασκευαστής αντιγράφου
5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου
19Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Περίπτωση 3: Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου
• Στο ακόλουθο παράδειγμα
• Κατασκευάζουμε τον copy constructor στην κλάση
• Βλέπουμε τι γίνεται όταν δηλώνουμε ένα αντικείμενο και το αρχικοποιούμε μέσω άλλου
αντικειμένου.
/*cpp4.copy_constructor_object_declaration.cpp: Δήλωση αντικειμένου μέσω άλλου αντικειμένου */
#include <iostream>
using namespace std;
class dummy {
public:
dummy();
dummy(const dummy &ob);
~dummy();
int x;
};
A. Θεωρία
3. Κατασκευαστής αντιγράφου
5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου
20Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
int main()
{
dummy ob1;
dummy ob2 = ob1; // dummy ob2(ob1);
return 0;
}
dummy::dummy()
{
cout<<"Constructing..."<<endl;
x=0;
}
dummy::dummy(const dummy &ob)
{
cout<<"Copy constructor..."<<endl;
x=ob.x;
}
dummy::~dummy()
{
cout<<"Destructing..."<<endl;
}
A. Θεωρία
3. Κατασκευαστής αντιγράφου
5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου
21Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Το πρόγραμμα εκτυπώνει:
• Στην main:
• Κατασκευάζεται το αντικείμενο ob1
• Η δήλωση dummy ob2 = ob1 καλεί τον copy constructor
• καλείται από το ob2 με όρισμα το ob1
• είναι ισοδύναμο με τη δήλωση:
• Καταστρέφονται τα δύο αντικείμενα.
dummy ob2(ob1);
ΠΡΟΣΟΧΗ: Τα παρακάτω είναι διαφορετικά πράγματα:
• dummy ob2 = ob1; (δήλωση και αρχικοποίηση, καλείται ο copy constructor)
• ob2 = ob1; (ανάθεση, θα αντιμετωπιστεί με υπερφόρτωση του =)
A. Θεωρία
3. Κατασκευαστής αντιγράφου
6. Παρατηρήσεις
22Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
• Ο copy constructor είναι μία ευκολία.
• Χρειάζεται πάντα να τον ορίζούμε;
• ΌΧΙ, αν η κλάση μας είναι πολύ απλή, δεν χρειάζεται copy constructor
• σκεφτόμαστε ότι η bit by bit αντιγραφή δεν θα δημιουργήσει προβλήματα.
• Αν όμως κάνουμε στην κλάση δυναμική διαχείριση μνήμης
• π.χ. έχουμε έναν δείκτη που δεσμεύει δυναμικά μνήμη για έναν πίνακα
• τότε ο copy constructor είναι ΑΠΑΡΑΙΤΗΤΟΣ.
• Γιατί είναι το όρισμα const;
• Με το const ορίζουμε ότι δεν πρέπει να πειραχτεί το αρχικό αντικείμενο
• Πράγματι, η δουλειά του copy constructor είναι μόνο να πάρει πληροφορίες από το
αντικείμενο που αντιγράφεται και όχι να το πειράξει.
Β. Ασκήσεις
Άσκηση 1: Συνάρτηση swap
23Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Υλοποιήστε τη συνάρτηση swap ώστε να δέχεται δύο ορίσματα και να ανταλλάσσει τις τιμές τους.
• Οι τιμές μπορούν να είναι:
• int,
• double,
• αντικείμενα της κλάσης σημείο (βλ. μάθημα 2 «Εισαγωγή στις κλάσεις», άσκηση 2)
Β. Ασκήσεις
Άσκηση 2: Επέκταση της κλάσης ARRAY
24Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Επεκτείνετε την κλάση ARRAY της άσκησης 2 του «Μάθημα 3: Κλάσεις και Δείκτες» με
κατασκευαστή αντιγράφου.
Β. Ασκήσεις
Άσκηση 3: Κλάση STRING
25Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές
Κατασκευάστε μία κλάση (STRING) που να περιτυλίσσει την έννοια της συμβολοσειράς ως εξής:
• Να έχει ως μέλη έναν δυναμικό πίνακα (δείκτης) χαρακτήρων, καθώς και τη διάσταση του
πίνακα
• Να έχει κατασκευαστές:
• Default
• Μόνο με τη συμβολοσειρά (να γίνεται δυναμική δέσμευση μνήμης όση και το μήκος της
συμβολοσειράς εισόδου)
• Αντιγράφου
• Ο καταστροφέας να διαγράφει τη μνήμη που έχει δεσμευτεί δυναμικά.
• Getter: Για τη συμβολοσειρά και το μήκος
• Setter: Μόνο για τη συμβολοσειρά
Η συνάρτηση main
• Να κατασκευάζει μία συμβολοσειρά str1, που αρχικοποιείται ως «This is a string»
• Να την αντιγράφει στη συμβολοσειρά str2 μέσω του copy constructor.
• Να αλλάζει την str1 σε «This is a new string»
• Να τυπώνει τις δύο συμβολοσειρές
1 sur 25

Recommandé

ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ par
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣDimitris Psounis
1.4K vues29 diapositives
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ par
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣΗ ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣDimitris Psounis
5.9K vues30 diapositives
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C par
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CC++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ CDimitris Psounis
2.3K vues33 diapositives
Η Γλώσσα C - Μάθημα 2 par
Η Γλώσσα C - Μάθημα 2Η Γλώσσα C - Μάθημα 2
Η Γλώσσα C - Μάθημα 2Dimitris Psounis
8.8K vues24 diapositives
Η Γλώσσα C - Μάθημα 1 par
Η Γλώσσα C - Μάθημα 1Η Γλώσσα C - Μάθημα 1
Η Γλώσσα C - Μάθημα 1Dimitris Psounis
15.1K vues23 diapositives
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9 par
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9 ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 9 Dimitris Psounis
5.2K vues27 diapositives

Contenu connexe

Tendances

ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ par
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣDimitris Psounis
15.3K vues34 diapositives
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ par
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥDimitris Psounis
12.9K vues48 diapositives
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ) par
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)Dimitris Psounis
8.2K vues34 diapositives
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4 par
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4Dimitris Psounis
5.8K vues25 diapositives
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 par
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2Dimitris Psounis
6.7K vues2 diapositives
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12 par
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 12Dimitris Psounis
5.5K vues24 diapositives

Tendances(20)

ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ par Dimitris Psounis
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 5 - ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ
Dimitris Psounis15.3K vues
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ par Dimitris Psounis
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 4 - ΤΕΛΕΣΤΕΣ και η ΔΟΜΗ ΕΛΕΓΧΟΥ
Dimitris Psounis12.9K vues
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis8.2K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4 par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 4
Dimitris Psounis5.8K vues
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 par Dimitris Psounis
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ20 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
Dimitris Psounis6.7K vues
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ par Dimitris Psounis
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 15 - ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ par Dimitris Psounis
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ par Dimitris Psounis
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 13 - ΔΟΜΕΣ
Dimitris Psounis7.7K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
Dimitris Psounis3.9K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 2
Dimitris Psounis6.8K vues
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ par Dimitris Psounis
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
Dimitris Psounis4.3K vues
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ par Dimitris Psounis
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 14 - ΕΜΒΕΛΕΙΑ ΜΕΤΑΒΛΗΤΩΝ
Dimitris Psounis4.2K vues

Similaire à Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ par
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣDimitris Psounis
9.7K vues34 diapositives
Kef10 a synartiseis par
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseismnikol
989 vues31 diapositives
Python. 1 2 δομή ακολουθίας par
Python. 1 2 δομή ακολουθίαςPython. 1 2 δομή ακολουθίας
Python. 1 2 δομή ακολουθίαςΙωάννου Γιαννάκης
3.5K vues13 diapositives
Aepp kef101 par
Aepp kef101Aepp kef101
Aepp kef101mnikol
1.2K vues24 diapositives
Κεφ. 10 Υποπρογράμματα par
Κεφ. 10 ΥποπρογράμματαΚεφ. 10 Υποπρογράμματα
Κεφ. 10 ΥποπρογράμματαΙωάννου Γιαννάκης
1.9K vues24 diapositives
Stelios poulakakis daktylidis diploma thesis presentation par
Stelios poulakakis daktylidis diploma thesis presentationStelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentationISSEL
238 vues30 diapositives

Similaire à Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ(17)

Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ par Dimitris Psounis
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣΗ ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Η ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 8 - ΔΕΙΚΤΕΣ
Dimitris Psounis9.7K vues
Kef10 a synartiseis par mnikol
Kef10 a synartiseisKef10 a synartiseis
Kef10 a synartiseis
mnikol989 vues
Aepp kef101 par mnikol
Aepp kef101Aepp kef101
Aepp kef101
mnikol1.2K vues
Stelios poulakakis daktylidis diploma thesis presentation par ISSEL
Stelios poulakakis daktylidis diploma thesis presentationStelios poulakakis daktylidis diploma thesis presentation
Stelios poulakakis daktylidis diploma thesis presentation
ISSEL238 vues
κεφάλαιο 02 anaptixi-2 par evaplyta
κεφάλαιο 02 anaptixi-2κεφάλαιο 02 anaptixi-2
κεφάλαιο 02 anaptixi-2
evaplyta1.3K vues
ΑΕΠΠ: 19ο Φύλλο Ασκήσεων par Nikos Michailidis
ΑΕΠΠ: 19ο Φύλλο ΑσκήσεωνΑΕΠΠ: 19ο Φύλλο Ασκήσεων
ΑΕΠΠ: 19ο Φύλλο Ασκήσεων
Nikos Michailidis1.4K vues
5.1 python γενικά - υπολογισμοί & μεταβλητές par Panagiotis Mastrapas
5.1 python γενικά - υπολογισμοί & μεταβλητές5.1 python γενικά - υπολογισμοί & μεταβλητές
5.1 python γενικά - υπολογισμοί & μεταβλητές
Advanced Notes on Pointers par jtsagata
Advanced Notes on PointersAdvanced Notes on Pointers
Advanced Notes on Pointers
jtsagata16 vues

Plus de Dimitris Psounis

Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ) par
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)Dimitris Psounis
641 vues7 diapositives
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ) par
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)Dimitris Psounis
475 vues8 diapositives
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ) par
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Dimitris Psounis
3.8K vues8 diapositives
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p) par
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)Dimitris Psounis
331 vues9 diapositives
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6 par
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6Dimitris Psounis
2.9K vues6 diapositives
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5 par
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5Dimitris Psounis
899 vues6 diapositives

Plus de Dimitris Psounis(20)

Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ) par Dimitris Psounis
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ (4διαφ)
Dimitris Psounis641 vues
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ) par Dimitris Psounis
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)
Dimitris Psounis475 vues
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ) par Dimitris Psounis
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)
Dimitris Psounis3.8K vues
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p) par Dimitris Psounis
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)
Dimitris Psounis331 vues
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6 par Dimitris Psounis
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 6
Dimitris Psounis2.9K vues
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5 par Dimitris Psounis
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
ΠΛΗ20 ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ 5
Dimitris Psounis899 vues
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis2.5K vues
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2 par Dimitris Psounis
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.2
Dimitris Psounis2.5K vues
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis4.6K vues
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1 par Dimitris Psounis
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
ΠΛΗ10 ΚΑΡΤΕΣ ΜΑΘΗΜΑΤΟΣ 2.1
Dimitris Psounis4.5K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7
Dimitris Psounis3.2K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis2.2K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8 par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 8
Dimitris Psounis3.2K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 7 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis2.1K vues
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ) par Dimitris Psounis
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6 (ΕΚΤΥΠΩΣΗ)
Dimitris Psounis2.8K vues

Dernier

Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx par
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptxΟ ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptxssuser86b52c
12 vues25 diapositives
Zoologiko_Nov_2023.pptx par
Zoologiko_Nov_2023.pptxZoologiko_Nov_2023.pptx
Zoologiko_Nov_2023.pptx36dimperist
85 vues5 diapositives
ΔΡΑΣΗ ΟΜΑΔΑ 4Η (1) (2).pdf par
ΔΡΑΣΗ ΟΜΑΔΑ 4Η (1) (2).pdfΔΡΑΣΗ ΟΜΑΔΑ 4Η (1) (2).pdf
ΔΡΑΣΗ ΟΜΑΔΑ 4Η (1) (2).pdfChrisa Kokorikou
53 vues5 diapositives
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ. par
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.ssuser43d27b
10 vues8 diapositives
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023 par
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023gymkeram
14 vues93 diapositives
tmimata2711112.pdf par
tmimata2711112.pdftmimata2711112.pdf
tmimata2711112.pdfckyriakou
11 vues14 diapositives

Dernier(20)

Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx par ssuser86b52c
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptxΟ ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx
Ο ΑΪ ΒΑΣΙΛΗΣ ΣΤΙΣ ΔΙΑΦΟΡΕΣ ΧΩΡΕΣ ΜΕΡΟΣ Β.pptx
ssuser86b52c12 vues
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ. par ssuser43d27b
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΔΥΤΙΚΗΣ ΑΤΤΙΚΗΣ.
ssuser43d27b10 vues
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023 par gymkeram
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023
Γυμνάσιο Κεραμωτής - Διδακτική επίσκεψη στο Ρούπελ 31.10.2023
gymkeram14 vues
tmimata2711112.pdf par ckyriakou
tmimata2711112.pdftmimata2711112.pdf
tmimata2711112.pdf
ckyriakou11 vues
ΟΜΑΔΑ 1η- ΠΕΝΤΕΛΗ(ΠΑΛΑΙΑ).pdf par Chrisa Kokorikou
ΟΜΑΔΑ 1η- ΠΕΝΤΕΛΗ(ΠΑΛΑΙΑ).pdfΟΜΑΔΑ 1η- ΠΕΝΤΕΛΗ(ΠΑΛΑΙΑ).pdf
ΟΜΑΔΑ 1η- ΠΕΝΤΕΛΗ(ΠΑΛΑΙΑ).pdf
Παγκόσμια Ημέρα Ατόμων με Αναπηρία.pptx par 7gymnasiokavalas
Παγκόσμια Ημέρα Ατόμων με Αναπηρία.pptxΠαγκόσμια Ημέρα Ατόμων με Αναπηρία.pptx
Παγκόσμια Ημέρα Ατόμων με Αναπηρία.pptx
Ενεργώ ως Πολίτης - Δράση "Είναι όλα τα λεμόνια ίδια;" par gymkeram
Ενεργώ ως Πολίτης - Δράση "Είναι όλα τα λεμόνια ίδια;"Ενεργώ ως Πολίτης - Δράση "Είναι όλα τα λεμόνια ίδια;"
Ενεργώ ως Πολίτης - Δράση "Είναι όλα τα λεμόνια ίδια;"
gymkeram13 vues
Γυμνάσιο Κεραμωτής - Γιορτή 28ης Οκτωβρίου και Παράδοση Σημαίας 27.11.2023 par gymkeram
Γυμνάσιο Κεραμωτής - Γιορτή 28ης Οκτωβρίου και Παράδοση Σημαίας 27.11.2023Γυμνάσιο Κεραμωτής - Γιορτή 28ης Οκτωβρίου και Παράδοση Σημαίας 27.11.2023
Γυμνάσιο Κεραμωτής - Γιορτή 28ης Οκτωβρίου και Παράδοση Σημαίας 27.11.2023
gymkeram27 vues
2023_11_29_Φ_152_136804_Α5_ΕΓΚΥΚΛΙΟΣ_ΑΙΤΗΣΗ_ΔΗΛΩΣΗ_ΕΠΑΛ_2024.pdf par ssuser9e6212
2023_11_29_Φ_152_136804_Α5_ΕΓΚΥΚΛΙΟΣ_ΑΙΤΗΣΗ_ΔΗΛΩΣΗ_ΕΠΑΛ_2024.pdf2023_11_29_Φ_152_136804_Α5_ΕΓΚΥΚΛΙΟΣ_ΑΙΤΗΣΗ_ΔΗΛΩΣΗ_ΕΠΑΛ_2024.pdf
2023_11_29_Φ_152_136804_Α5_ΕΓΚΥΚΛΙΟΣ_ΑΙΤΗΣΗ_ΔΗΛΩΣΗ_ΕΠΑΛ_2024.pdf
ssuser9e6212550 vues
Από τον ηλεκτρισμό στον μαγνητισμό par Dimitra Mylonaki
Από τον ηλεκτρισμό στον μαγνητισμόΑπό τον ηλεκτρισμό στον μαγνητισμό
Από τον ηλεκτρισμό στον μαγνητισμό
ίδρυμα Λασκαρίδη 22-11-23.pptx par psipsa
ίδρυμα Λασκαρίδη 22-11-23.pptxίδρυμα Λασκαρίδη 22-11-23.pptx
ίδρυμα Λασκαρίδη 22-11-23.pptx
psipsa14 vues
2023_11_29_Φ_251_136784_Α5_ΥΠΟΒΟΛΗ_ΔΙΚΑΙΟΛΟΓΗΤΙΚΩΝ_ΥΠΟΨΗΦΙΩΝ_ΜΕ_ΕΙΔΙΚΕΣ_ΕΚΠΑΙ... par ssuser9e6212
2023_11_29_Φ_251_136784_Α5_ΥΠΟΒΟΛΗ_ΔΙΚΑΙΟΛΟΓΗΤΙΚΩΝ_ΥΠΟΨΗΦΙΩΝ_ΜΕ_ΕΙΔΙΚΕΣ_ΕΚΠΑΙ...2023_11_29_Φ_251_136784_Α5_ΥΠΟΒΟΛΗ_ΔΙΚΑΙΟΛΟΓΗΤΙΚΩΝ_ΥΠΟΨΗΦΙΩΝ_ΜΕ_ΕΙΔΙΚΕΣ_ΕΚΠΑΙ...
2023_11_29_Φ_251_136784_Α5_ΥΠΟΒΟΛΗ_ΔΙΚΑΙΟΛΟΓΗΤΙΚΩΝ_ΥΠΟΨΗΦΙΩΝ_ΜΕ_ΕΙΔΙΚΕΣ_ΕΚΠΑΙ...
ssuser9e6212510 vues
Σχολές, Σπουδές & Πανελλαδικές 2024 par EmployEdu
Σχολές, Σπουδές & Πανελλαδικές 2024Σχολές, Σπουδές & Πανελλαδικές 2024
Σχολές, Σπουδές & Πανελλαδικές 2024
EmployEdu32 vues
Veroia in Autumn.pdf par dpavlidou
Veroia in Autumn.pdfVeroia in Autumn.pdf
Veroia in Autumn.pdf
dpavlidou11 vues

Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 4 - ΚΛΑΣΕΙΣ ΚΑΙ ΑΝΑΦΟΡΕΣ

  • 1. H ΓΛΩΣΣΑ C++ Μάθημα 4: Κλάσεις και Αναφορές Δημήτρης Ψούνης
  • 2. Περιεχόμενα Μαθήματος Α. Θεωρία 1. Αναφορές 1. Τι είναι αναφορά 2. Παράδειγμα χρήσης αναφοράς 3. ...και το πιο συνηθισμένο λάθος 2. Αναφορές και Συναρτήσεις 1. Διοχέτευση ορίσματος μέσω τιμής (by value) 2. Διοχέτευση ορίσματος μέσω δείκτη (by pointer) 3. Διοχέτευση ορίσματος μέσω αναφοράς (by reference) 2Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές 3. Κατασκευαστής αντιγράφου 1. Αντίγραφα Αντικειμένων 2. Ορισμός Κατασκευαστή Αντιγράφου (copy constructor) 3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής 4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής 5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου Ασκήσεις Β. Ασκήσεις
  • 3. A. Θεωρία 1. Αναφορές 1. Τι είναι αναφορά 3Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Οι αναφορές είναι ένα νέο στοιχείο της C++ • Η δήλωση μιας αναφοράς: • Πρέπει να συνοδευεται από την μεταβλητή, της οποίας θα είναι συνώνυμο. • Στην δήλωση, το & πρέπει να προηγείται του ονόματος της αναφοράς • Παράδειγμα μιας αναφοράς ref στην ακέραια μεταβλητή x: • Και πλέον όταν γράφουμε ref είναι σαν να γράφουμε x. • Προσοχή! • Η αναφορά δεν είναι ανεξάρτητη από τη μεταβλητή στην οποία αναφέρεται. • Δεν έχει κάποια ανεξάρτητη διεύθυνση, κάτι που να μοιάζει με δείκτη, ή οτιδήποτε άλλο. • Σχηματικά το απεικονίζουμε: • Η αναφορά (reference) είναι ένα συνώνυμο (alias) μιας μεταβλητής. int &ref = x; • Κάποιοι προγραμματιστές προτιμούν να γράφουν την δήλωση ως: int& ref;
  • 4. A. Θεωρία 1. Αναφορές 2. Παράδειγμα χρήσης αναφοράς 4Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Βλέπουμε και ένα απλό παράδειγμα επίδειξης της χρήσης της αναφοράς: /* cpp4.reference.cpp Χρήση αναφοράς */ #include <iostream> using namespace std; int main() { int x = 3; int &r = x; cout<<"x="<<x<<" r="<<r<<endl; x=4; cout<<"x="<<x<<" r="<<r<<endl; r=5; cout<<"x="<<x<<" r="<<r<<endl; return 0; }
  • 5. A. Θεωρία 1. Αναφορές 3. ...και το πιο συνηθισμένο λάθος! 5Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • O ακόλουθος κώδικας δεν κάνει αυτό που θέλει ο προγραμματιστής (βλ. σχόλια): • Προσοχή: Η αναφορά σχετίζεται αποκλειστικά με την μεταβλητή για την οποία δηλώθηκε αρχικά. /* cpp4.reference_mistake.cpp Συνηθισμένο λάθος στις αναφορές */ #include <iostream> using namespace std; int main() { int x = 3, y=4; int &r = x; cout<<"r="<<r<<endl; r=y; // Προσπαθεί να αλλάξει την αναφορά σε άλλη μεταβλητή cout<<"x="<<x<<endl; // Άλλαξε όμως το x return 0; }
  • 6. A. Θεωρία 2. Αναφορές και Συναρτήσεις 1. Διοχέτευση ορίσματος μέσω τιμής (by value) 6Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Να κάνουμε μία κλάσική υπενθύμιση από τη C, για τον τρόπο που διοχετεύουμε ορίσματα σε συναρτήσεις: • O 1ος τρόπος είναι μέσω τιμής, όπου ξέρουμε ότι οι αλλαγές που γίνονται στη συνάρτηση, δεν διατηρούνται έξω από αυτήν: • H έξοδος είναι: • Πολύ αναλυτική εξήγηση στο παράδειγμα, στο «Γλώσσα C: Μάθημα 8: Δείκτες» /*cpp4.byvalue.cpp: Πέρασμα ορίσματος μέσω τιμής */ #include <iostream> using namespace std; void change(int vA); int main() { int a=1; cout<<"main: a="<<a<<endl; change(a); cout<<"main: a="<<a<<endl; return 0; } void change(int vA) { vA=2; cout<<"change: vA="<<vA<<endl; }
  • 7. A. Θεωρία 2. Αναφορές και Συναρτήσεις 2. Διοχέτευση ορίσματος μέσω δείκτη (by pointer) 7Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • O 2ος τρόπος είναι μέσω δείκτη, όπου ξέρουμε ότι οι αλλαγές που γίνονται στη συνάρτηση, διατηρούνται έξω από αυτήν: • H έξοδος είναι: /*cpp4.bypointer.cpp: Πέρασμα ορίσματος μέσω δείκτη */ #include <iostream> using namespace std; void change(int *pA); int main() { int a=1; cout<<"main: a="<<a<<endl; change(&a); cout<<"main: a="<<a<<endl; return 0; } void change(int *pA) { *pA=2; cout<<"change: *pA="<<*pA<<endl; } • Στη C ο τρόπος αναφέρεται και «by reference», αλλά στη C++ αναφέρεται «by pointer»
  • 8. A. Θεωρία 2. Αναφορές και Συναρτήσεις 3. Διοχέτευση ορίσματος μέσω αναφοράς (by reference) 8Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • O 3ος τρόπος είναι μέσω αναφοράς (νέος τρόπος) • Ο ορισμός της συνάρτησης έχει αναφορά: • Παρατηρήσεις: • Διοχετεύοντας αναφορά, δεν δημιουργείται αντίγραφο του ορίσματος, άρα με έμμεσο τρόπο διοχετεύεται η ίδια η μεταβλητή. • Συνεπώς οι αλλαγές που γίνονται σε αυτήν διατηρούνται και εκτός της συνάρτησης. • Μέσα στη συνάρτηση, η χρηση της μεταβλητής είναι πιο «εύκολη» από την διαχείριση που κάνουμε όταν διοχετεύουμε το όρισμα μέσω δείκτη. void change(int &rA) { rA=2; cout<<"change: rA="<<rA<<endl; }
  • 9. A. Θεωρία 2. Αναφορές και Συναρτήσεις 3. Διοχέτευση ορίσματος μέσω αναφοράς (by reference) 9Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Ολοκληρωμένο το πρόγραμμα είναι: • Οι αναφορές λοιπόν κάνουν πιο εύκολη τη ζωή μας σε σχέση με τη διαχείριση δεικτών: • Ένας καλός κανόνας είναι • «Χρησιμοποίησε αναφορές όποτε μπορείς και δείκτες όποτε πρέπει» © /*cpp4.byreference.cpp: Πέρασμα ορίσματος μέσω αναφοράς */ #include <iostream> using namespace std; void change(int &rA); int main() { int a=1; cout<<"main: a="<<a<<endl; change(a); cout<<"main: a="<<a<<endl; return 0; } void change(int &rA) { rA=2; cout<<"change: rA="<<rA<<endl; } © www.geeksforgeeks.org
  • 10. A. Θεωρία 3. Κατασκευαστής αντιγράφου 1. Αντίγραφα Αντικειμένων 10Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Όταν διοχετεύουμε σε συνάρτηση όρισμα το οποίο είναι αντικείμενο, μέσω τιμής: • Δημιουργείται αντίγραφο του αντικειμένου (όπως γίνεται και με τις απλές μεταβλητές) • Βλέπουμε ένα παράδειγμα: /*cpp4.copy_arg_by_value.c pp: Δημιουργία αντιγράφου όταν αντικείμενο διοχετεύεται ως όρισμα */ #include <iostream> using namespace std; class dummy { public: dummy(); ~dummy(); int x; }; void f(dummy ob); int main() { dummy d; // καλείται ο constructor f(d); return 0; } dummy::dummy() { cout<<"Constructing..."<<endl; } dummy::~dummy() { cout<<"Destructing..."<<endl; } void f(dummy ob) { // το όρισμα είναι αντίγραφο // καταστρέφεται το αντίγραφο }
  • 11. A. Θεωρία 3. Κατασκευαστής αντιγράφου 1. Αντίγραφα Αντικειμένων 11Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Εκτελώντας το πρόγραμμα έχουμε την εκτύπωση: • Εξήγηση: • Main: • Δήλωση του αντικειμένου d (καλείται ο constructor). • Κλήση f(d): • Δημιουργείται αντίγραφο bit by bit (δεν καλείται constructor), αφού το όρισμα είναι μέσω τιμής. • Με την ολοκλήρωση της συνάρτησης, καταστρέφεται το αντίγραφo • Συνέχεια της main • Καταστρέφεται το αντικείμενο d Αντίστοιχες καταστάσεις μπορεί να συμβούν π.χ. όταν: • Επιστρέφουμε ένα αντικείμενο σε μία συνάρτηση μέσω τιμής (όχι δείκτη ή αναφορά) Για τις περιπτώσεις αυτές (και άλλες), η C++ ορίζει μια προγραμματιστική ευκολία: • Τον κατασκευαστή αντιγράφων (copy constructor)
  • 12. A. Θεωρία 3. Κατασκευαστής αντιγράφου 2. Ορισμός Κατασκευαστή Αντιγράφου (copy constructor) 12Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Για την αποφυγή παρόμοιων προβλημάτων, • Μπορούμε να ορίσουμε έναν ειδικό κατασκευαστή, τον κατασκευαστή αντιγράφου. • Η δήλωση του κατασκευαστή αντιγράφου γίνεται ως εξής: • Τον καλεί το νέο αντικείμενο (αντίγραφό) που κατασκευάζεται • Το όρισμα που δέχεται είναι το αντικείμενο μέσω του οποίου αρχικοποιείται. • Θα δούμε αναλυτικά τις τρεις περιπτώσεις • Ο κατασκευαστής αντιγράφου καλείται αυτόματα όταν: 1. Διοχετεύουμε ως όρισμα μέσω τιμής (by value) ένα αντικείμενο 2. Επιστρέφουμε μέσω τιμής (by value) ένα αντικείμενο 3. Γίνεται δήλωση και αρχικοποίηση ενός αντικειμένου, μέσω ενός άλλου αντικειμένου class_name(const class_name &ob)
  • 13. A. Θεωρία 3. Κατασκευαστής αντιγράφου 3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής 13Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Περίπτωση 1: Διοχέτευση αντικειμένου σε συνάρτηση μέσω τιμής • Στο ακόλουθο παράδειγμα • Κατασκευάζουμε τον copy constructor στην κλάση • Βλέπουμε τι γίνεται όταν διοχετεύουμε αντικείμενο της κλάσης μέσω τιμής. /*cpp4.copy_constructor_arg_by_value.cpp: Copy Constructor: Όρισμα μέσω τιμής */ #include <iostream> using namespace std; class dummy { public: dummy(); dummy(const dummy &ob); ~dummy(); int x; }; void f(dummy arg);
  • 14. A. Θεωρία 3. Κατασκευαστής αντιγράφου 3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής 14Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές int main() { dummy d; cout<<"Main: Before calling f"<<endl; f(d); cout<<"Main: After calling f"<<endl; return 0; } dummy::dummy() { cout<<"Constructing..."<<endl; x=0; } dummy::dummy(const dummy &ob) { cout<<"Copy constructor..."<<endl; x=ob.x; } dummy::~dummy() { cout<<"Destructing…"<<endl; } void f(dummy arg) { cout<<"In function..."<<endl; }
  • 15. A. Θεωρία 3. Κατασκευαστής αντιγράφου 3. Κλήση όταν διοχετεύεται αντικείμενο σε συνάρτηση μέσω τιμής 15Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Το πρόγραμμα εκτυπώνει: • Στην main: • Κατασκευάζεται το αντικείμενο x • Καλείται η συνάρτηση f • Κατασκευάζεται το αντίγραφο μέσω του copy constructor • καλείται από το αντίγραφο (ob) με όρισμα το αντικείμενο (x) • Σαν να τρέχει η εντολή οb(x) • Διοχετεύεται ως όρισμα • Ολοκληρώνεται η εκτέλεση της συνάρτησης • Καταστρέφεται το αντίγραφο • Ολοκληρώνεται η main • Καταστρέφεται το αντικείμενο x
  • 16. A. Θεωρία 3. Κατασκευαστής αντιγράφου 4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής 16Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Περίπτωση 2: Επιστροφή αντικειμένου από συνάρτηση μέσω τιμής • Στο ακόλουθο παράδειγμα • Κατασκευάζουμε τον copy constructor στην κλάση • Βλέπουμε τι γίνεται όταν επιστρέφουμε αντικείμενο της κλάσης μέσω τιμής. /*cpp4.copy_constructor_return_ob.cpp: Copy Constructor: Επιστροφή αντικειμένου */ #include <iostream> using namespace std; class dummy { public: dummy(); dummy(const dummy &ob); ~dummy(); int x; }; dummy f();
  • 17. A. Θεωρία 3. Κατασκευαστής αντιγράφου 4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής 17Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές int main() { cout<<"Main: Before calling f"<<endl; f(); cout<<"Main: After calling f"<<endl; return 0; } dummy::dummy() { cout<<"Constructing..."<<endl; x=0; } dummy::dummy(const dummy &ob) { cout<<"Copy constructor..."<<endl; x=ob.x; } dummy::~dummy() { cout<<"Destructing..."<<endl; } dummy f() { dummy ob; cout<<"In function..."<<endl; return ob; }
  • 18. A. Θεωρία 3. Κατασκευαστής αντιγράφου 4. Επιστροφη αντικειμένου από συνάρτηση μέσω τιμής 18Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Το πρόγραμμα εκτυπώνει: • Δεν βλέπουμε τον copy constructor! • Ωστόσο σε άλλο μεταγλωττιστή είναι δυνατόν να δούμε κλήση copy constructor στην περίπτωση αυτή. • Μετά την κλήση της συνάρτησης, θα βλέπαμε την κατασκευή ενός προσωρινού αντικειμένου το οποίο θα ήταν το αποτέλεσμα της κλήσης της συνάρτησης. Ο onlineGDB έχει υλοποιήσει μία βελτιστοποίηση ειδικά για την περίπτωση αυτή (αναφέρεται ως: return value optimization) • και δεν κατασκευάζει αντίγραφο. • Ωστόσο σε άλλους μεταγλωττιστές ενδέχεται αυτή η βελτιστοποίηση να μην έχει υλοποιηθεί.
  • 19. A. Θεωρία 3. Κατασκευαστής αντιγράφου 5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου 19Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Περίπτωση 3: Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου • Στο ακόλουθο παράδειγμα • Κατασκευάζουμε τον copy constructor στην κλάση • Βλέπουμε τι γίνεται όταν δηλώνουμε ένα αντικείμενο και το αρχικοποιούμε μέσω άλλου αντικειμένου. /*cpp4.copy_constructor_object_declaration.cpp: Δήλωση αντικειμένου μέσω άλλου αντικειμένου */ #include <iostream> using namespace std; class dummy { public: dummy(); dummy(const dummy &ob); ~dummy(); int x; };
  • 20. A. Θεωρία 3. Κατασκευαστής αντιγράφου 5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου 20Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές int main() { dummy ob1; dummy ob2 = ob1; // dummy ob2(ob1); return 0; } dummy::dummy() { cout<<"Constructing..."<<endl; x=0; } dummy::dummy(const dummy &ob) { cout<<"Copy constructor..."<<endl; x=ob.x; } dummy::~dummy() { cout<<"Destructing..."<<endl; }
  • 21. A. Θεωρία 3. Κατασκευαστής αντιγράφου 5. Δήλωση και αρχικοποίηση μέσω άλλου αντικειμένου 21Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Το πρόγραμμα εκτυπώνει: • Στην main: • Κατασκευάζεται το αντικείμενο ob1 • Η δήλωση dummy ob2 = ob1 καλεί τον copy constructor • καλείται από το ob2 με όρισμα το ob1 • είναι ισοδύναμο με τη δήλωση: • Καταστρέφονται τα δύο αντικείμενα. dummy ob2(ob1); ΠΡΟΣΟΧΗ: Τα παρακάτω είναι διαφορετικά πράγματα: • dummy ob2 = ob1; (δήλωση και αρχικοποίηση, καλείται ο copy constructor) • ob2 = ob1; (ανάθεση, θα αντιμετωπιστεί με υπερφόρτωση του =)
  • 22. A. Θεωρία 3. Κατασκευαστής αντιγράφου 6. Παρατηρήσεις 22Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές • Ο copy constructor είναι μία ευκολία. • Χρειάζεται πάντα να τον ορίζούμε; • ΌΧΙ, αν η κλάση μας είναι πολύ απλή, δεν χρειάζεται copy constructor • σκεφτόμαστε ότι η bit by bit αντιγραφή δεν θα δημιουργήσει προβλήματα. • Αν όμως κάνουμε στην κλάση δυναμική διαχείριση μνήμης • π.χ. έχουμε έναν δείκτη που δεσμεύει δυναμικά μνήμη για έναν πίνακα • τότε ο copy constructor είναι ΑΠΑΡΑΙΤΗΤΟΣ. • Γιατί είναι το όρισμα const; • Με το const ορίζουμε ότι δεν πρέπει να πειραχτεί το αρχικό αντικείμενο • Πράγματι, η δουλειά του copy constructor είναι μόνο να πάρει πληροφορίες από το αντικείμενο που αντιγράφεται και όχι να το πειράξει.
  • 23. Β. Ασκήσεις Άσκηση 1: Συνάρτηση swap 23Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Υλοποιήστε τη συνάρτηση swap ώστε να δέχεται δύο ορίσματα και να ανταλλάσσει τις τιμές τους. • Οι τιμές μπορούν να είναι: • int, • double, • αντικείμενα της κλάσης σημείο (βλ. μάθημα 2 «Εισαγωγή στις κλάσεις», άσκηση 2)
  • 24. Β. Ασκήσεις Άσκηση 2: Επέκταση της κλάσης ARRAY 24Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Επεκτείνετε την κλάση ARRAY της άσκησης 2 του «Μάθημα 3: Κλάσεις και Δείκτες» με κατασκευαστή αντιγράφου.
  • 25. Β. Ασκήσεις Άσκηση 3: Κλάση STRING 25Δημήτρης Ψούνης, Η Γλώσσα C++, Μάθημα 4: Κλάσεις και Αναφορές Κατασκευάστε μία κλάση (STRING) που να περιτυλίσσει την έννοια της συμβολοσειράς ως εξής: • Να έχει ως μέλη έναν δυναμικό πίνακα (δείκτης) χαρακτήρων, καθώς και τη διάσταση του πίνακα • Να έχει κατασκευαστές: • Default • Μόνο με τη συμβολοσειρά (να γίνεται δυναμική δέσμευση μνήμης όση και το μήκος της συμβολοσειράς εισόδου) • Αντιγράφου • Ο καταστροφέας να διαγράφει τη μνήμη που έχει δεσμευτεί δυναμικά. • Getter: Για τη συμβολοσειρά και το μήκος • Setter: Μόνο για τη συμβολοσειρά Η συνάρτηση main • Να κατασκευάζει μία συμβολοσειρά str1, που αρχικοποιείται ως «This is a string» • Να την αντιγράφει στη συμβολοσειρά str2 μέσω του copy constructor. • Να αλλάζει την str1 σε «This is a new string» • Να τυπώνει τις δύο συμβολοσειρές