ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διαφάνειες παρουσίασης #5 4 Στατικά πεδία και μέθοδοι 4 Απλή κληρονομικότητα 4 Κατασκευαστές και καταστροφείς 4 Κλάσεις και εμβέλεια 4 Πολλαπλή κληρονομικότητα
2Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Στατικά πεδία και μέθοδοι(i) class Person { private: double myWeight; static double TotalWeight; public: Person (double w); ~Person (); void printWeight (); static void printTotalWeight (); };
3Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Στατικά πεδία και μέθοδοι(ii) double Person::TotalWeight = 0.0; Person::Person (double w) { myWeight = w; TotalWeight += myWeight; } Person::~Person () { TotalWeight -= myWeight; }
4Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Στατικά πεδία και μέθοδοι(iii) void Person::printWeight () { cout << "I weigh " << myWeight << " kg.\n"; } void Person::printTotalWeight () { cout << "In total " << TotalWeight << " kg.\n"; }
5Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Στατικά πεδία και μέθοδοι(iv) int main () { Person x(65), y(100); x.printWeight(); x.printTotalWeight(); Person * z = new Person(85); Person::printTotalWeight(); delete z; y.printTotalWeight(); return 0; }
6Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κληρονομικότητα(i) u Εξειδίκευση και σχέση "είναι" (is-a) LibraryItem BookJournalIssue volume number u Οι εξειδικευμένες κλάσεις κληρονομούν τα χαρακτηριστικά των γονέων τους title year whereIs() author publisher lend()
7Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Απλή κληρονομικότητα(i) class LibraryItem { protected: char * title; int year; public: LibraryItem (const char *t, int y); ~LibraryItem (); Location whereIs (); };
8Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Απλή κληρονομικότητα(ii) class Book: public LibraryItem { protected : char * author; char * publisher; public : Book (const char *t, const char *a, const char *p, int y); ~Book (); void lend (Person & p, Date d1, Date d2); };
9Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Απλή κληρονομικότητα(iii) class JournalIssue: public LibraryItem { protected : int volume, number; Date date; public : JournalIssue (const char *t, int v, int n, Date d); };
10Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές και καταστροφείς(i) LibraryItem::LibraryItem ( const char *t, int y) { title = new char [strlen(t)+1]; strcpy(title, t); year = y; } LibraryItem::~LibraryItem () { delete [] title; }
11Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές και καταστροφείς(ii) Book::Book (const char *t, const char *a, const char *p, int y) : LibraryItem(t, y) { author = new char [strlen(a)+1]; strcpy(author, a); publisher = new char [strlen(p)+1]; strcpy(publisher, p); } Book::~Book () { delete [] author; delete [] publisher; }
12Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κατασκευαστές και καταστροφείς(iii) JournalIssue::JournalIssue ( const char *t, int v, int n, Date d) : LibraryItem(t, d.getYear()), date(d) { volume = v; number = n; }
13Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κλάσεις και εμβέλεια(i) u πεδία και μέθοδοι public: ορατά από l όλους u πεδία και μέθοδοι private: ορατά από l την υλοποίηση των μεθόδων της κλάσης l την υλοποίηση των φιλικών συναρτήσεων u πεδία και μέθοδοι protected: ορατά l όπως το private, και επιπλέον από l την υλοποίηση των μεθόδων των κλάσεων που τα κληρονομούν
14Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κλάσεις και εμβέλεια(ii) u κληρονομικότητα με public: l τα πεδία και οι μέθοδοι της κληρονομούμενης κλάσης διατηρούν τους περιορισμούς εμβέλειας που έχουν u κληρονομικότητα με private: l τα πεδία και οι μέθοδοι της κληρονομούμενης κλάσης γίνονται private
15Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Πολλαπλή κληρονομικότητα(i) u Μια κλάση κληρονομεί από περισσότερες LibraryItem title year whereIs() MultimediaItem equipment play() Film director
16Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Πολλαπλή κληρονομικότητα(ii) class Film: public LibraryItem, public MultimediaItem { protected: char * director; public: Film (const char *t, int y, Equipment e, const char *d); ~Film (); };
17Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Πολλαπλή κληρονομικότητα(iii) Film::Film (const char *t, int y, Equipment e, const char *d) : LibraryItem(t, y), MultimediaItem(e) { director = new char [strlen(d)+1]; strcpy(director, d); } Film::~Film () { delete [] director; }