Föreläsningsanteckningar OOP-föreläsning 1, måndag 2 septemver 2007 =================================================================== Idag ---- 1. Om kursen, särskilt om delkurser och scheman 2. C++ 3. Repetition av C: person-programmet 4. Objektorientering: klassen "Person" 5. C++: klassen "Person" (6. Mer objektorientering i C++: arv, polymorfism) Först personprogrammet i C, som en enda fil: person.c -------- /* person.c */ #include #include struct person { char namn[30 + 1]; int alder; }; typedef struct person person; void las_person(person* pp) { printf("Ge personens namn: "); /* gets(p->namn); -- Osäker - kan ge buffer overflow */ fgets(pp->namn, sizeof pp->namn, stdin); /* Bättre */ if (strchr(pp->namn, '\n') != NULL) *strchr(pp->namn, '\n') = '\0'; printf("Ge personens ålder: "); scanf("%d", &pp->alder); while (getchar() != '\n') ; } void skriv_person(person p) { printf("Namn: %s\n", p.namn); printf("Ålder: %d\n", p.alder); } int yngre_person(person p1, person p2) { return p1.alder < p2.alder; } int main(void) { person a, b; las_person(&a); las_person(&b); if (yngre_person(a, b)) { skriv_person(a); skriv_person(b); } else { skriv_person(b); skriv_person(a); } printf("Tryck RETUR för att avsluta programmet.\n"); while (getchar() != '\n') ; return 0; } Sen personprogrammet i C, uppdelat på flera filer (ni får lära er mer om detta i kursen Programmeringsmetodik): person.h -------- /* person.h */ struct person { char namn[30 + 1]; int alder; }; typedef struct person person; void las_person(person* pp); void skriv_person(person p); int yngre_person(person p1, person p2); person.c -------- /* person.c */ #include #include #include "person.h" void las_person(person* pp) { printf("Ge personens namn: "); /* gets(pp->namn); -- Farlig, kan ge buffer overflow */ fgets(pp->namn, sizeof pp->namn, stdin); /* Bättre */ if (strchr(pp->namn, '\n') != NULL) *strchr(pp->namn, '\n') = '\0'; printf("Ge personens ålder: "); scanf("%d", &pp->alder); while (getchar() != '\n') ; } void skriv_person(person p) { printf("Namn: %s\n", p.namn); printf("Ålder: %d\n", p.alder); } int yngre_person(person p1, person p2) { return p1.alder < p2.alder; } main.c ------ /* main.c */ #include #include "person.h" int main(void) { person a, b; las_person(&a); las_person(&b); if (yngre_person(a, b)) { skriv_person(a); skriv_person(b); } else { skriv_person(b); skriv_person(a); } printf("Tryck RETUR för att avsluta programmet.\n"); while (getchar() != '\n') ; return 0; } Personprogrammet i C++, uppdelat på flera filer: person.h -------- // person.h class Person { private: string namn; // Man kan använda C-strängar också: char namn[30 + 1]; int alder; public: void las(); void skriv(); bool yngre(Person p2); }; person.cpp ---------- // person.cpp #include #include using namespace std; #include "person.h" void Person::las() { cout << "Ge personens namn: "; cin >> namn; cout << "Ge personens ålder: "; cin >> alder; cin.ignore(); } void Person::skriv() { cout << "Namn: " << namn << endl; cout << "Ålder: " << alder << endl; } bool Person::yngre(Person p2) { return alder < p2.alder; } main.cpp -------- // main.cpp #include using namespace std; #include "person.h" int main() { Person 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; }