ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο8

Σχετικά έγγραφα
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Σηµειώσεις Εργαστηρίου)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Θεόδωρος Γ. Λάντζος Διάλεξη Νο1

Διάλεξη 18η: Διαχείρηση Αρχείων

Προγραμματισμός Υπολογιστών με C++

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Υπολογιστών με C++

Κλάσεις και αντικείμενα #include <iostream.h<

Προγραμματισμός Υπολογιστών με C++

Εργαστήριο 9: Αρχεία

Υπερφόρτωση τελεστών (operator(

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ. Σχηματική παράσταση του προγράμματος. logariasmos

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα

Εργαστήριο 10 Κλάσεις

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3

Εισαγωγή στον Προγραμματισμό

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Περιεχόμενα. Πρόλογος... 21

Αρχεία Κεφαλίδων ΑΡΧΕΙΑ ΚΕΦΑΛΙΔΩΝ. Γεώργιος Παπαϊωάννου ( )

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Μεθόδων Επίλυσης Προβλημάτων

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

C: Από τη Θεωρία στην Εφαρμογή

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

CASE STUDY 1: #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> #define N 26. class Histogram { private: int arr[n];

Προγραμματισμός ΙI (E)

Προγραμματισμός ΙI (E)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

Προγραμματισμός Ι (ΗΥ120)

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

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Προγραμματισμός ΙI (E)

18. ΡΕΥΜΑΤΑ(STREAMS) ΚΑΙ ΑΡΧΕΙΑ (FILES)

Προγραμματισμός Υπολογιστών με C++

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

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

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Επεξεργασία Αρχείων Κειµένου

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Σηµειώσεις Θεωρίας)

Αντικειμενοστρεφής Προγραμματισμός

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

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

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

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Υπολογιστών με C++

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΙΑ ΚΕΙΜΕΝΟΥ ΣΤΗΝ C

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Ι (ΗΥ120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδηµαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόµενη λύση

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

Χωρική Βάση δεδοµένων Autocad

ιαφάνειες παρουσίασης #6 (β)

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Προγραμματισμός Υπολογιστών με C++

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εργαστήριο 3 Εντολή for while, do while

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

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

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός I (Θ)

Ειδικά Θέματα Ι. Σήμερα!

Περιεχόμενα. Πρόλογος... 17

Ενδεικτική περιγραφή μαθήματος

Διαδικαστικός Προγραμματισμός

B. Ενσωμάτωση Ιθαγενών Μεθόδων

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

Ι Ανασκόπηση και εμβάθυνση Μερικά πιο προχωρημένα θέματα. ΙΙ Τα αρχεία δεδομένων στη C

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

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

Προγραµµατισµός Ι (ΗΥ120)

Προγραμματισμός Υπολογιστών με C++

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο6

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

είκτες και Πίνακες (2)

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Transcript:

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο8 1

Εικονικές Συναρτήσεις (Virtual Functions) Εικονική συνάρτηση είναι μια συνάρτηση που στην πραγματικότητα δεν υπάρχει, αλλά εμφανίζεται σαν πραγματική σε ορισμένα τμήματα ενός προγράμματος Δηλώνεται με την δεσμευμένη λέξη virtual μπροστά από το όνομα της συνάρτησης Η αρχή των εικονικών συναρτήσεων στηρίζεται στην βάση ότι ο μεταγλωττιστής επιλέγει τη συνάρτηση με βάση το περιεχόμενο του δείκτη και όχι τον τύπο του δείκτη 2

#include <iostream.h> class A virtual void display() cout << " Βασική κλάση." ; ; class Par1 : public A void display() cout << " 1η παράγωγη κλάση." ; ; class Par2 : public A void display() cout << " 2η παράγωγη κλάση." ; ; main( ) Par1 p1; Par2 p2; A *ptr; ptr = &p1; ptr >display(); ptr = &p2; ptr >display(); 1η παράγωγη κλάση 2η παράγωγη κλάση 3

Φίλες Συναρτήσεις Είναι οι συναρτήσεις οι οποίες δεν ανήκουν στις συναρτήσεις μέλη της κλάσης αλλά μπορούν να προσπελάσουν τα ιδιωτικά ή προστατευμένα δεδομένα μιας κλάσης. Για να λειτουργήσει μια φιλική συνάρτηση σε μια ή περισσότερες κλάσης πρέπει να δηλώσουμε τον τύπο της συνάρτησης εντός της κλάσης ή των κλάσεων με την δεσμευμένη λέξη friend μπροστά από τον τύπο της συνάρτησης Ο κώδικας της συνάρτησης να βρίσκεται εκτός την περιγραφή της κλάσης ή των κλάσεων Αποφυγή χρήσης φιλικών συναρτήσεων διότι καταρρέει η αντικειμενοστραφή θεμελίωση του προγράμματος Χρήση φιλικών συναρτήσεων μόνο σε εξειδικευμένες περιπτώσεις και κυρίως όταν η σχέση κληρονομικότητας δεν μπορεί να λειτουργήσει ανάμεσα στις αναφερόμενες κλάσεις όπου να οριστεί σχέση κληρονομικότητας από μια κοινή βασική κλάση 4

class B; class A private: int x; A() x = 5 ; friend int ff(a a1, B b1) ; ; class B private: int y; B() y = 4 ; friend int ff(a a1, B b1) ; ; int ff(a a1, B b1) return (a1.x+b1.y); main() A a; B b; cout << Άθροισµα = << ff(a, b); 5

Αρχεία Δυαδικά Η δυνατότητα αποθήκευσης και ανάκτησης αντικειμένων σε μόνιμες μονάδες αποθήκευσης Δήλωση Δείκτη Αρχείου Άνοιγμα Χρήση Κλείσιμο FILE *fp; fp=fopen( ONOMA.DAT, MODE ); fclose(fp); Εγγραφή Επόμενη Σελίδα Ανάγνωση fread(αντικείμενο, sizeof(τύπος αντικειμένου),πλήθος στοιχείων, Δείκτης Αρχείου) Χρήση και της feof(fp) συνάρτηση ελέγχου τέλος αρχείου fwrite(αντικείμενο, sizeof(τύπος αντικειμένου),πλήθος στοιχείων, Δείκτης Αρχείου) 6

Καταστάσεις Ανοίγματος Δυαδικών Αρχείων rb Άνοιγμα δυαδικού αρχείου για διάβασμα (το αρχείο πρέπει να υπάρχει) wb Άνοιγμα δυαδικού αρχείου για γράψιμο (αν το αρχείο υπάρχει, σβήνει το περιεχόμενο του) ab Προσάρτηση σε δυαδικό αρχείο (αν το αρχείο δεν υπάρχει, το δημιουργεί) rb+ wb+ ab+ Άνοιγμα για διάβασμα και γράψιμο (το αρχείο πρέπει να υπάρχει) Άνοιγμα για διάβασμα και γράψιμο (αν το αρχείο δεν υπάρχει, το δημιουργεί, αν υπάρχει, σβήνει το περιεχόμενο του) Άνοιγμα αρχείου για διάβασμα και προσάρτηση (αν το αρχείο δεν υπάρχει, το δημιουργεί) 7

#include <iostream.h> #include <fstream.h> #include <stdio.h> #include <conio.h> class Person protected: int am; char name[20]; void setdata(int am1, char name1[]) am = am1; strcpy(name, name1); ; void main() Person p; FILE *outfile; int armit; char onoma[20]; outfile = fopen("person.dat", wb ); cout << " Give am, 0 to stop:"; cin >> armit; while (armit!= 0) cout << " Give name:"; cin >> onoma; p.setdata(armit, onoma); fwrite(&p, sizeof(p), 1, outfile); cout << " Give am, 0 to stop:"; cin >> armit; fclose(outfile); Δήλωση Κλάσης Δήλωση Δείκτη Αρχείου Άνοιγμα Αρχείου για εγγραφή Εγγραφή Αντικειμένου Κλείσιμο Αρχείου 8

Δήλωση Κλάσης Δήλωση Δείκτη Αρχείου Άνοιγμα Αρχείου για εγγραφή Χρήση συνάρτηση ελέγχου τέλος αρχείου Ανάγνωση Αντικειμένου Κλείσιμο Αρχείου 9

// #pragma hdrstop #include "Student.h" #include <stdio.h> #include <conio.h> #include <iostream.h> #include <string.h> // #pragma package(smart_init) void Student::setData(int am1, char name1[], float grade1) am = am1; strcpy(name,name1); grade = grade1; void Student::printData() cout << "AM :" << am << endl; cout << "Name :" << name << endl; cout << "Grade :" << grade << endl; void Student::writeStudents(FILE *sf) cout << "Give Student AM (0 to finish):"; cin >> am; while(am!= 0) cout << "Give Name:"; cin >> name; cout << "Give Grade:"; cin >> grade; fwrite(this, sizeof(*this), 1, sf); cout << endl; cout << "Give Student AM (0 to finish):"; cin >> am; void Student::readStudents(FILE *sf) cout << "The contents of the file are: " << endl; fread(this, sizeof(*this), 1, sf); while(!feof(sf)) this >printdata(); cout << endl; fread(this, sizeof(*this), 1, sf); getch(); 10 Εργασία Νο10

// #ifndef StudentH #define StudentH #include <stdio.h> #include <conio.h> #include <iostream.h> // #endif class Student private: int am; char name[20]; float grade; void setdata(int am1, char name1[], float grade1); void printdata(); void writestudents(file *sf); void readstudents(file *sf); ; 11 Εργασία Νο10

#pragma hdrstop #include <stdio.h> #include "Student.h" #pragma argsused void test() Student s; FILE *fp; fp = fopen("student.dat","wb"); s.writestudents(fp); fclose(fp); fp = fopen("student.dat","rb"); s.readstudents(fp); fclose(fp); int main(int argc, char* argv[]) test(); return 0; 12 Εργασία Νο10