
//Hunter.h
#ifndef __HUNTER_H
#define __HUNTER_H
#include <iostream>
namespace Hunter {
class Animal {
protected:
static const double basePrice;
public:
virtual double getPrice() const = 0;
virtual void print() const = 0;
};
class Rabbit: public Animal {
static const double rabbitFactor;
public:
double getPrice() const {
return basePrice * rabbitFactor;
}
void print() const {
std::cout << "The price of a rabbit is $" << getPrice() << std::endl;
}
};
class PolarBear: public Animal {
static const double polarBearFactor;
public:
double getPrice() const {
return basePrice * polarBearFactor;
}
void print() const {
std::cout << "The price of a polar bear is $" << getPrice() << std::endl;
}
};
class Squirrel: public Animal {
static const double squirrelFactor;
public:
double getPrice() const {
return basePrice * squirrelFactor;
}
void print() const {
std::cout << "The price of a squirrel is $" << getPrice() << std::endl;
}
};
}
#endif // __HUNTER_H
// Hunter.cpp
#include "Hunter.h"
namespace Hunter {
const double Animal::basePrice = 100000;
const double Rabbit::rabbitFactor = 0.3;
const double PolarBear::polarBearFactor = 2.4;
const double Squirrel::squirrelFactor = 1.2;
}
// Main.cpp
#include <iostream>
#include "Hunter.h"
using namespace std;
using namespace Hunter;
int main() {
Animal *P[3];
P[0] = new Rabbit();
P[1] = new Squirrel();
P[2] = new PolarBear();
for (int i = 0; i < 3; i++) {
P[i]->print();
delete P[i];
}
return 0;
}