OOP: Bilpekarexemplet från föreläsning 8

Här är programmet bilpekarna-1.cpp, som är (en lite omflyttad variant av) det som jag skrev på tavlan på föreläsningen:
#include <iostream>
#include <string>

using namespace std;

// -------------- Klassen "Person" ---------------

class Person {
private:
  string namn;
  int alder;
public:
  Person(string namn, int alder);
};

Person::Person(string namn, int alder) {
  this->namn = namn;
  this->alder = alder;
}

// ---------------- Klassen "Bil" ----------------

class Motor {
private:
  double effekt;
public:
  Motor(double effekt);
};

Motor::Motor(double effekt) {
  this->effekt = effekt;
}

// --------------- Klassen "Motor" ---------------

class Bil {
private:
  string bilnr;
  Person* owner;
  Motor* motor;
public:
  Bil(string bilnr, Person* owner, Motor* motor);
  ~Bil();
};

Bil::Bil(string bilnr, Person* owner, Motor* motor) {
  this->bilnr = bilnr;
  this->motor = motor;
  this->owner = owner;
}

Bil::~Bil() {
  delete motor;
}

// -------------- Funktionen "main" --------------

int main() {
  Person goran("Göran", 58);
  Person* gudrunp = new Person("Gudrun", 57);
  Motor m1(110.0);
  Motor* m2p = new Motor(120.0);
  Bil bil1("RFN 540", gudrunp, m2p);
  Bil* bil2p = new Bil("BOS 118", &goran, &m1);

  delete bil2p;
  delete m2p;
  delete gudrunp;
}
Här är bilden från föreläsningen på hur datastrukturerna ser ut, precis före första delete-anropet:

Datastrukturerna

Uppgiften går ut på att komma på vad som blir fel när programmet körs.

Förslag på hur man kan arbeta:

  1. Studera bilden av datastrukturerna, "torrsimma" programmet (dvs stega igenom på papper), och fundera över vad som händer.
  2. Provkör programmet.
  3. Lägg in några lämpliga spårutskrifter och provkör igen.
  4. Ändra i programmet, och provkör.
Svar med diskussion finns här.


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 3 oktober 2007