Driver1.C 1/8
[top][prev][next]
// Uses pure virual functions to call appropriate method
#include "Frogosaur.H"
#include "Animal.H"
#include "Dinosaur.H"
const int N = 5;
int main () {
Animal* animalPtrs[N];
animalPtrs[0] = new Frog();
animalPtrs[1] = new Dinosaur();
animalPtrs[2] = new Frog();
animalPtrs[3] = new Dinosaur();
animalPtrs[4] = new Dinosaur();
for(int i = 0; i < N; i++ ) {
cout << "animalPtrs[" << i << "]: ";
animalPtrs[i] -> talk();
}
return EXIT_SUCCESS;
}
Driver2.C 2/8
[top][prev][next]
// Demonstrates multiple inheritance
#include "Frogosaur.H"
#include "Animal.H"
#include "Dinosaur.H"
int main () {
Frogosaur frogosaur = Frogosaur();
frogosaur.swim(); // from Frog base class
frogosaur.walk(); // from Dinosaur base class
return EXIT_SUCCESS;
}
Driver3.C 3/8
[top][prev][next]
// Demonstrates diamond-problem in multiple inheritance
// DOES NOT COMPILE
#include "Frogosaur.H"
#include "Animal.H"
#include "Dinosaur.H"
int main () {
Frogosaur frogosaur = Frogosaur();
frogosaur.swim(); // from Frog base class
frogosaur.walk(); // from Dinosaur base class
frogosaur.talk(); // uh-oh, talk is defined in both Frog
// and Dinosaur, which one do we want?
return EXIT_SUCCESS;
}
Driver4.C 4/8
[top][prev][next]
// Demonstrates use of scope resolution operator to
// overcome diamond problem in multiple inheritance
#include "Frogosaur.H"
#include "Animal.H"
#include "Dinosaur.H"
int main () {
Frogosaur frogosaur = Frogosaur();
frogosaur.swim(); // from Frog base class
frogosaur.walk(); // from Dinosaur base class
frogosaur.Dinosaur::talk(); // specifically the Dinosaur's talk method
return EXIT_SUCCESS;
}
Animal.H 5/8
[top][prev][next]
#ifndef _ANIMAL_H_
#define _ANIMAL_H_
using namespace std;
// virtual base class - can not instantiate
class Animal {
public:
virtual void talk() = 0; // pure virtual
};
#endif
Dinosaur.H 6/8
[top][prev][next]
#ifndef _DINOSAUR_H_
#define _DINOSAUR_H_
#include <iostream>
#include "Animal.H"
using namespace std;
// extends the animal class
class Dinosaur : public Animal {
public:
void talk() { cout << "Oh I'm a dinosaur and I'm OK..." << endl; }
void walk() { cout << "Walk, Walk." << endl; }
};
#endif
Frog.H 7/8
[top][prev][next]
#ifndef _FROG_H_
#define _FROG_H_
#include <iostream>
#include "Animal.H"
using namespace std;
// extends the animal class
class Frog : public Animal {
public:
void talk() { cout << "Ribit, ribit." << endl; }
void swim() { cout << "Splash, splash." << endl; }
};
#endif
Frogosaur.H 8/8
[top][prev][next]
#ifndef _FROGOSAUR_H_
#define _FROGOSAUR_H_
#include "Frog.H"
#include "Dinosaur.H"
class Frogosaur : public Frog, public Dinosaur {
// nothing additional
};
#endif
Generated by GNU enscript 1.6.1.