CD5250 - Objektorienterad programutveckling med C++, 5 poäng, period 4, 2002

Laboration 4

intro

Syftet med denna laboration är att öva på att identifiera lämpliga klasser och ordna dessa i lämpliga förhållanden till varandra. Vi undersöker arvsbegreppet i C++.

Efter avklarad laboration bör ni kunna:

  • Identifiera klasser från ett givet problemområde samt att göra en arvshierarki av dessa.
  • Beskriva hur konstruktorer och destruktorer anropas vid arv och olika medlemsvariabler.
  • Använda nyckelord i C++ för att styra åtkomst av variabler och metoder i arvshierarkier.
  • Förklara och använda multipelt arv, samt undvika de farligaste fällorna.
  • A. arv

    På en icke namngiven högskola skall man göra ett register innehållande alla personer med anknytning till högskolan. Er uppgift är att identifiera lämpliga objekt ock klasser samt ordna dessa i en lämplig arvshierarki.

    Följande information finns till ert förfogande:

  • Personer med anknytning till högskolan är antingen anställda eller studerande.
  • För alla personer skall det finnas information om namn och personnummer.
  • Anställda är lärare, forskare eller administrativ personal.
  • För alla anställda skall det finnas information om lön och anställningsår.
  • För forskare skall det finnas information om aktuellt forskningsområde.
  • För administrativ personal skall det finnas information om arbetsuppgifter.
  • Studerande har antingen studerat färdigt eller studerar just nu.
  • För alla studenter skall det finnas information om inskrivningsår och totalt antal högskolepoäng.
  • För studenter som studerat färdigt skall det finnas information om examen och examensår.
  • Skriv klassdeklarationerna för samtliga klasser i din arvshierarki samt implementera ovan nämnda datamedlemmar och metoder för att läsa och ändra dessa. Prova även att skapa och använda några objekt ur de olika klasserna (använd debuggerns trace-funktion för att se hur det fungerar).

    B. anropsordning

    Tänk er en arvshierarki med tre klasser A, B och C som i figuren till vänster. Samtliga klasser innehåller en konstruktor och en destruktor. Ta reda på i vilken ordning dessa anropas när man skapar ett objekt av klassen C och sedan tar bort det.

    C * ptr;
    ptr = new C;
    delete ptr;
    Exempel 1.

    Implementera de tre klasserna enligt given arvshierarki och använd debuggerns trace-funktion eller spårutskrifter.

    Om man utökar klassen B med en medlemsvariabel av klassen D, när skapas då denna?

    Försök finna den regel som säger i vilken ordning konstruktorerna och destruktorerna anropas i samband med arv och medlemsvariabler av mer komplicerade typer (instanser av klasser).

    C. multipelt arv

    Multipelt arv uppstår när en underklass ärver från mer än en överklass. Förknippat med detta uppstår ibland en del problem och svårigheter och rekommendationen är därför att man undviker sådana konstruktioner så långt som möjligt.

  • Definiera en klass Klocka som hanterar tid (timmar, minuter och sekunder) samt har en metod print som skriver ut tiden.
  • Definiera en klass Radio som består av aktuell frekvens (Hz) och en logisk variabel för av/på samt en metod print som skriver ut aktuell frekvens.
  • Definiera en klass KlockRadio som ärver från både klass Klocka och Radio.
  • Problem 1

    Om båda överklasserna innehåller data eller metoder med samma namn (här metoden print) så uppstår en namnkonflikt. Vilken metod print skall väljas i följande fall?

    Lös namnkonflikten utan att förändra överklasserna Klocka och Radio.

    KlockRadio minKlockRadio(6, 30, 0, 104.5, TRUE);
    minKlockRadio.print();		// Namnkonflikt
    Exempel 2.
CD5250
Nyheter
Kursinformation
Föreläsningar
Labbar
Projektuppgift
Gott och blandat
C --> C++
STL-intro
Size-klassen
Visual C++
Kursplan
Schema
Underrubriker
arv
anropsordning
multipelt arv
Ansvarig lärare: Stefan Råmonth - stefan.ramonth@realfast.se
Senast uppdaterad: