Οντοκεντρικός Προγραμματισμός

Σχετικά έγγραφα
Οντοκεντρικός Προγραμματισμός

Οντοκεντρικόσ Προγραμματιςμόσ

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στους Αλγορίθμους

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στους Αλγορίθμους

Οντοκεντρικός Προγραμματισμός

Διοικητική Λογιστική

Οντοκεντρικός Προγραμματισμός

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Οντοκεντρικός Προγραμματισμός

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στους Αλγορίθμους

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Οντοκεντρικός Προγραμματισμός

Κβαντική Επεξεργασία Πληροφορίας

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Διοικητική Λογιστική

Οντοκεντρικός Προγραμματισμός

Βέλτιστος Έλεγχος Συστημάτων

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κβαντική Επεξεργασία Πληροφορίας

Οντοκεντρικός Προγραμματισμός

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Ευφυής Προγραμματισμός

Βάσεις Περιβαλλοντικών Δεδομένων

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Οντοκεντρικός Προγραμματισμός

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 5: Κληρονομικότητα. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Μηχανολογικό Σχέδιο Ι

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Τεχνικό Σχέδιο - CAD

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Διδακτική Πληροφορικής

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

Φιλοσοφία της Ιστορίας και του Πολιτισμού

Διδακτική των εικαστικών τεχνών Ενότητα 1

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Διδακτική των εικαστικών τεχνών Ενότητα 3

ΣΥΜΠΕΡΙΦΟΡΑ ΚΑΤΑΝΑΛΩΤΗ

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική της Πληροφορικής

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Εφαρμογές των Τεχνολογιών της Πληροφορίας και των Επικοινωνιών στη διδασκαλία και τη μάθηση

Εισαγωγή στους Υπολογιστές

Το Εικονογραφημένο Βιβλίο στην Προσχολική Εκπαίδευση

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Δυναμική και Έλεγχος E-L Ηλεκτρομηχανικών Συστημάτων

Τεχνικό Σχέδιο - CAD

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Εισαγωγή στους Υπολογιστές

Αερισμός. Ενότητα 1: Αερισμός και αιμάτωση. Κωνσταντίνος Σπυρόπουλος, Καθηγητής Σχολή Επιστημών Υγείας Τμήμα Ιατρικής

Διδακτική των εικαστικών τεχνών Ενότητα 2

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Κβαντική Επεξεργασία Πληροφορίας

Δομημένος Προγραμματισμός

Κβαντική Επεξεργασία Πληροφορίας

Εισαγωγή στους Υπολογιστές

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Βέλτιστος Έλεγχος Συστημάτων

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Ψηφιακή Επεξεργασία Εικόνων

Δυναμική και Έλεγχος E-L Ηλεκτρομηχανικών Συστημάτων

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Δομημένος Προγραμματισμός

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Transcript:

Οντοκεντρικός Προγραμματισμός Ενότητα 6: C++ ΚΛΑΣΕΙΣ, ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ, ΠΟΛΥΜΟΡΦΙΣΜΟΣ Πολυμορφισμός ΔΙΔΑΣΚΟΝΤΕΣ:Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Πολυμορφισμός

Πολυμορφισμός Εισαγωγή o Απαιτείται η ύπαρξη μιας ιεραρχίας κλάσεων o Χρησιμοποιούμε αντικείμενα που ανήκουν στην ίδια ιεραρχία κλάσεων ως να ήταν όλα αντικείμενα της κλάσης βάσης o Εικονικές συναρτήσεις + δυναμική σύνδεση (Virtual functions + dynamic binding) Τεχνολογίες που υλοποιούν τον πολυμορφισμό o Επιτρέπει την αποτελεσματική επέκταση των προγραμμάτων Νέες κλάσεις μπορούν εύκολα να προστεθούν και να υποστούν επεξεργασία όπως και οι υπάρχουσες 3/23

Παράδειγμα Κλάση βάσης: Animal Παραγόμενες κλάσεις: Fish, Frog, Bird Η μέθοδος move() είναι κοινή, αλλά υλοποιείται διαφορετικά για κάθε είδος Animal. Μια εφαρμογή κρατά έναν πίνακα από αντικείμενα των παραγόμενων κλάσεων και κάθε 1sec στέλνει ένα μήνυμα move σε κάθε αντικείμενο. Κάθε αντικείμενο τύπου Animal που δέχεται το μήνυμα γνωρίζει πως θα πρέπει να αντιδράσει. Το ίδιο μήνυμα που στέλνεται σε διαφορετικά αντικείμενα (του ίδιου βασικού τύπου Animal) έχει πολλές μορφές αποτελεσμάτων πολυμορφισμός Πόσο εύκολο είναι να προσθέσουμε μια νέα κλάση Turtle? 4/23

Παράδειγμα class Animal{ public: Animal(char* n):name(n){ void print() const{ cout << "-------------------\n"; cout << name << " is an animal"; private: char* name; ; class Dog : public Animal{ public: Dog(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a dog." << endl; ; class Cat : public Animal{ public: Cat(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a cat." << endl; ; class Bird : public Animal{ public: Bird(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a bird." << endl; ; Υπερκάλυψη της μεθόδου print στις παράγωγες κλάσεις int main() { Dog d("pluto"); d.print(); Cat c("tom"); c.print(); Bird b("twitty"); b.print(); Animal *animalpointer = &d; animalpointer->print(); ------------------- Pluto is an animal, and a dog. ------------------- Tom is an animal, and a cat. ------------------- Twitty is an animal, and a bird. ------------------- Pluto is an animal Ανάθεση αντικειμένου παράγωγης κλάσης σε δείκτη της κλάσης βάσης. Η μέθοδος που θα κληθεί εξαρτάται από την κλάση του δείκτη, (εδώ είναι τύπου Animal) Διαφορετική συμπεριφορά από την Java 5/23

Παράδειγμα - virtual class Animal{ public: Animal(char* n):name(n){ virtual void print() const{ cout << "-------------------\n"; cout << name << " is an animal"; private: char* name; ; class Dog : public Animal{ public: Dog(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a dog." << endl; ; class Cat : public Animal{ public: Cat(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a cat." << endl; ; class Bird : public Animal{ public: Bird(char* n):animal(n){ void print() const{ Animal::print(); cout << ", and a bird." << endl; ; Αλλαγή της προκαθορισμένης συμπεριφοράς με virtual δήλωση int main() { Dog d("pluto"); d.print(); Cat c("tom"); c.print(); Bird b("twitty"); b.print(); Animal *animalpointer = &d; animalpointer->print(); ------------------- Pluto is an animal, and a dog. ------------------- Tom is an animal, and a cat. ------------------- Twitty is an animal, and a bird. ------------------- Pluto is an animal, and a dog. Η μέθοδος που θα κληθεί εξαρτάται από την πραγματική κλάση του αντικειμένου (δημιουργήθηκε ως Dog) 6/23

Δείκτης παραγόμενης κλάσης σε αντικείμενο της κλάσης βάσης Στο προηγούμενο παράδειγμα είδαμε o Δείκτης κλάσης βάσης σε αντικείμενο της παραγόμενης κλάσης Dog is an Animal Δείκτης παραγόμενης κλάσης σε αντικείμενο της κλάσης βάσης o Compiler error Animal is not a Dog Η κλάση Dog μπορεί να διαθέτει ιδιότητες/λειτουργίες που δεν διαθέτει η κλάση Animal Μπορούμε να κάνουμε cast τη διεύθυνση του αντικειμένου της κλάσης βάσης σε δείκτη παραγόμενης κλάσης Ονομάζεται downcasting Επιτρέπει την προσπέλαση λειτουργικότητας της παραγόμενης κλάσης int main() { Animal a("unknown"); Dog d("pluto"); Animal* animalpointer = &d; Dog* dogpointer = &a; 7/23

Κλήση μεθόδων παραγόμενης κλάσης μέσω δείκτη κλάσης βάσης Χρήση δείκτη/αναφοράς o Δείκτης κλάσης βάσης μπορεί να δείχνει σε αντικείμενο της παραγομένης κλάσης Μπορεί όμως να καλέσει μόνο τις μεθόδους της κλάσης βάσης o Η κλήση μεθόδων της παραγόμενης κλάσης συνιστά λάθος Μέθοδοι που δεν ορίζονται στη κλάση βάσης Ο τύπος δεδομένων ενός/μιας δείκτη/αναφοράς προσδιορίζουν τι μεθόδους μπορούμε να καλέσουμε 8/23

Εικονικές Συναρτήσεις (Virtual Functions) Ο κανόνας είναι ο τύπος του δείκτη να καθορίζει τι μέθοδοι μπορούν να κληθούν Οι virtual functions μπορούν να τον αλλάξουν o το αντικείμενο (και όχι ο δείκτης) να καθορίζει τι μέθοδοι μπορούν να κληθούν 9/23

Εικονικές Συναρτήσεις (Virtual Functions) Δηλώνουμε την print ως virtual στην κλάση βάσης o Υπερκαλύπτουμε τη print σε κάθε παραγόμενη κλάση σαν να την ξαναορίζουμε, αλλά ή νέα συνάρτηση πρέπει να έχει ακριβώς την ίδια υπογραφή με αυτή της κλάσης βάσης o Εάν δηλώσουμε μια συνάρτηση virtual στην κλάση βάσης virtual void print() const; είναι virtual σε όλες τις παραγόμενες κλάσεις Είναι καλή πρακτική να δηλώνουμε ρητά ως virtual τις συναρτήσεις και στις παραγόμενες κλάσεις (program clarity) Δυναμική σύνδεση (Dynamic binding) o Επιλογή κλήσης της κατάλληλης συνάρτησης κατά το χρόνο εκτέλεσης o Συμβαίνει μόνο με τη χρήση δεικτών/αναφορών Εάν η συνάρτηση κληθεί με χρήση ονόματος αντικειμένου (π.χ. dogobject.print()), τότε χρησιμοποιείται η συνάρτηση του αντικειμένου (static binding) 10/23

Χρήση πεδίου για τύπο αντικειμένων και εντολής switch Ένας τρόπος να προσδιορίσουμε την κλάση ενός αντικειμένου o Βάζουμε στην κλάση βάσης ένα πεδίο shapetype στην κλάση Shape o Χρησιμοποιούμε μια switch για να καλέσουμε τη σωστή print συνάρτηση Πολλά προβλήματα o Μπορεί να ξεχάσουμε τον έλεγχο κάποιας περίπτωσης στην switch o Εάν προσθέσουμε/αφαιρέσουμε μια κλάση πρέπει να ενημερώσουμε την switch Χρονοβόρο και επιρρεπές σε λάθη Καλύτερα με πολυμορφισμό o απλούστερα προγράμματα, λιγότερο debugging 11/23

Abstract Classes Abstract class o Σκοπός: να αποτελέσει μια base class (abstract base class) o Ελλιπής Συμπληρώνεται με τις παραγόμενες κλάσεις o Δεν κατασκευάζουμε αντικείμενα από μια abstract class Μπορούμε να έχουμε δείκτες και αναφορές Concrete classes o Μπορούμε να κατασκευάσουμε αντικείμενα o Υλοποιούμε όλες τις συναρτήσεις που περιέχουν 12/23

Abstract Classes Είναι χρήσιμες, όχι υποχρεωτικές Για να ορίσουμε μια abstract class o Δεν υπάρχει το keyword abstract όπως στην Java o Θέλουμε μια ή περισσότερες "pure" virtual functions virtual void print() const = 0; o Regular virtual functions Έχουν υλοποίηση, η υπερκάλυψη είναι προαιρετική o Pure virtual functions Δεν έχουν υλοποίηση, η υπερκάλυψη είναι υποχρεωτική o Μια abstract class μπορεί να έχει δεδομένα και υλοποιημένες συναρτήσεις 13/23

Παράδειγμα #include <vector> using std::vector; void virtualviareference( const Animal &baseclassref ){ baseclassref.print(); void virtualviapointer( const Animal *baseclassptr ){ baseclassptr->print(); int main() { Animal a("unknown"); Dog d("pluto"); Cat c("tom"); Bird b("twitty"); vector< Animal* > animalvector( 3 ); animalvector [ 0 ] = &d; animalvector [ 1 ] = &c; animalvector [ 2 ] = &b; cout << " VIRTUAL VIA REFERENCE" <<endl; for ( int i = 0; i < animalvector.size(); i++ ) virtualviareference( *animalvector[ i ] ); cout <<endl<<endl<< " VIRTUAL VIA POINTER" <<endl; for ( int i = 0; i < animalvector.size(); i++ ) virtualviapointer( animalvector[ i ] ); 14/23

Virtual Destructors Δείκτης κλάσης βάσης σε αντικείμενο της παραγόμενης κλάσης o Εάν καταστρέψουμε το αντικείμενο με την delete, η συμπεριφορά είναι απροσδιόριστη Απλή λύση o Δηλώνουμε τον destructor της base-class ως virtual o Όταν καλείται η delete καλείται και ο κατάλληλος destructor Όταν καταστρέφουμε ένα αντικείμενο μιας παραγόμενης κλάσης o Πρώτα εκτελείται ο destructor της παραγόμενης κλάσης o Μετά εκτελείται ο destructor της base-class Οι constructors δεν μπορεί να είναι virtual 15/23

Παράδειγμα #include <vector> #include <typeinfo> using std::vector; int main() { vector< Animal* > animalvector( 3 ); animalvector [ 0 ] = new Dog("Pluto"); animalvector [ 1 ] = new Cat("Tom"); animalvector [ 2 ] = new Bird("Twitty"); for ( int i = 0; i < animalvector.size(); i++ ){ Dog *dogptr = dynamic_cast <Dog *>( animalvector[ i ] ); if (dogptr) animalvector[i]->print(); Η dynamic_cast επιστρέφει null αν δεν μπορεί να γίνει το casting Η typeid επιστρέφει αντικείμενο type_info, το οποίο περιέχει πληροφορίες όπως το όνομα του αντικειμένου με την μέθοδο name() for ( int i = 0; i < animalvector.size(); i++ ){ cout <<endl<< "deleting object " << typeid (*animalvector[ i ]).name() ; delete animalvector[i]; ------------------- Pluto is an animal, and a dog. deleting object 3Dog deleting object 3Cat deleting object 4Bird 16/23

Πρόσθετο Υλικό Μελετήστε και τα παραδείγματα από τα Κεφάλαιo 12 του βιβλίου: «C++ How to Program, 9/e Paul & Harvey Deitel» http://media.pearsoncmg.com/ph/esm/deitel/cpp_htp_9/code_examples/code_examples.zip 17/23

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 18/23

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0.1 19/23

Σημείωμα Αναφοράς Copyright: Πανεπιστήμιον Πατρών, Ιωάννης Χατζηλυγερούδης, 2015. «Οντοκεντρικός Προγραμματισμός». Έκδοση: 1.0.1 Πάτρα 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/ceid1105/ 20/23

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους. 22/23

Σημείωμα Χρήσης Έργων Τρίτων Οι διαφάνειες βασίζονται στο βιβλίο «C++ How to Program, 8th Edition, Harvey M. Deitel, Paul J. Deitel, Prentice Hall.» 23/23