Föreläsningsanteckningar OOP-föreläsning 2, tisdag 4 september 2007 =================================================================== Idag ==== 1. Objektorientering: modularisering (med gömd information), klasser, arv, polymorfism (http://www.databasteknik.se/webbkursen/oo-grunder/index.html) 2. Arv i C++ 3. Pekare och dynamiska data i C++ 4. Polymorfism i C++ 5. Obs! Test-hemuppgiften senast på fredag! http://basen.oru.se/kurser/c/2007-2008-p12-distans/labbar/inl-1/index.html 2. Arv i C++ ============ person.h och person.cpp samma som förut student.h --------- // student.h #include "person.h" class Student : public Person { private: double poang; public: void las(); void skriv(); }; student.cpp ----------- // student.cpp #include #include using namespace std; #include "student.h" void Student::las() { Person::las(); cout << "Ge studentens poäng: "; cin >> poang; cin.ignore(); } void Student::skriv() { Person::skriv(); cout << "Poäng: " << poang << endl; } main.cpp -------- // main.cpp #include using namespace std; #include "student.h" int main(void) { Student a, b; a.las(); b.las(); if (a.yngre(b)) { a.skriv(); b.skriv(); } else { b.skriv(); a.skriv(); } printf("Tryck RETUR för att avsluta programmet.\n"); cin.ignore(); return 0; } Körexempel ---------- Ge personens namn: Olle Ge personens ålder: 4 Ge studentens poäng: 0 Ge personens namn: Leif Ge personens ålder: 22 Ge studentens poäng: 114.3 Namn: Olle Ålder: 4 Poäng: 0 Namn: Leif Ålder: 22 Poäng: 114.3 Tryck RETUR för att avsluta programmet. 3. Pekare och dynamiska data i C++ ================================== pekare.cpp ---------- // pekare.cpp #include using namespace std; #include "person.h" int main(void) { Person* a; Person* b; // Eller: Person *a, *b; // Men inte: Person* a, b; a = new Person(); b = new Person(); a->las(); b->las(); if (a->yngre(*b)) { a->skriv(); b->skriv(); } else { b->skriv(); a->skriv(); } printf("Tryck RETUR för att avsluta programmet.\n"); cin.ignore(); delete a; delete b; return 0; } 4. Polymorfism i C++ ==================== dynamiskt.cpp ------------- // dynamiskt.cpp #include using namespace std; #include "student.h" int main(void) { Person* a; Person* b; a = new Person(); b = new Student(); a->las(); b->las(); if (a->yngre(*b)) { a->skriv(); b->skriv(); } else { b->skriv(); a->skriv(); } printf("Tryck RETUR för att avsluta programmet.\n"); cin.ignore(); delete a; delete b; return 0; } Körexempel 1 ------------ Ge personens namn: Olle Ge personens ålder: 4 Ge personens namn: Leif Ge personens ålder: 22 Namn: Olle Ålder: 4 Namn: Leif Ålder: 22 Tryck RETUR för att avsluta programmet. person.h -------- // person.h class Person { private: string namn; int alder; public: virtual void las(); virtual void skriv(); bool yngre(Person p2); }; student.h --------- // student.h #include "person.h" class Student : public Person { private: double poang; public: virtual void las(); virtual void skriv(); }; Körexempel 2 ------------ Ge personens namn: Olle Ge personens ålder: 4 Ge personens namn: Leif Ge personens ålder: 22 Ge studentens poäng: 114.3 Namn: Olle Ålder: 4 Namn: Leif Ålder: 22 Poäng: 114.3 Tryck RETUR för att avsluta programmet.