
Programmet simulerar djur. Varje djur vet vad som skall hända med det när det möter ett djur av annan typ. Lejonet vet att det äter när det träffar en zebra, zebran vet att den blir uppäten. Om ett djur inte vet vad det skall göra i mötet med ett annat djur så har det ett default-beteende. Ibatiba är ett okänt djur som har default-beteendet.
Problem 1: Raden
Kod: Markera allt
pLion->meet(pIbatiba);
Problem2: Om man stoppar in två djur i vattenhålet så kan man se vad som händer när de två möts. Så var det tänkt iallafall. Men det fungerar inte så.
Någon som kan dethär och har lust att kolla på det?
Kod: Markera allt
// cpptst.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
class Animal {
public:
virtual void meet(Animal * p);
};
void Animal::meet(Animal * P)
{
std::cout << "Unknown behavior!" << std::endl; // default-beteendet
}
class Ibatiba:public Animal {
};
class Zebra;
class Lion:public Animal {
public:
void meet(Zebra * p);
};
void Lion::meet(Zebra * p)
{
std::cout << "I eat" << std::endl;
}
class Zebra:public Animal {
public:
void meet(Lion * p);
};
void Zebra::meet(Lion * p)
{
std::cout << "I am devored!" << std::endl;
}
// A water hole with room for two animals
class WaterHole {
public:
WaterHole(Animal * p1, Animal * p2);
void lets_meet(void);
private:
Animal * pa1;
Animal * pa2;
};
WaterHole::WaterHole(Animal * p1, Animal * p2)
{
pa1 = p1;
pa2 = p2;
}
void WaterHole::lets_meet(void)
{
pa1->meet(pa2);
pa2->meet(pa1);
}
int _tmain(int argc, _TCHAR* argv[])
{
Ibatiba * pIbatiba = new Ibatiba;
Lion * pLion = new Lion;
Zebra * pZebra = new Zebra;
std::cout << "A day in Africa:\n";
pLion->meet(pZebra);
pZebra->meet(pLion);
// Funkar inte, varför?
// Ibatiba ärver ju från Animal...
// cpptst.cpp(80): error C2664: 'Lion::meet' : cannot convert parameter 1 from 'Ibatiba *' to 'Zebra *'
//
// pLion->meet(pIbatiba);
std::cout << "At the water hole:\n";
WaterHole * pWaterHole = new WaterHole(pLion, pZebra);
pWaterHole->lets_meet();
return 0;
}
Såhär blir det:A day in Africa:
I eat
I am devored!
Unknown behavior!
At the water hole:
I eat
I am devored!
A day in Africa:
I eat
I am devored!
At the water hole:
Unknown behavior!
Unknown behavior!