
// Madar.h
#ifndef __MADAR_H
#define __MADAR_H
#include <iostream>
namespace MadarGyujtemeny {
class Madar {
protected:
static const double alapAr;
public:
virtual double ertek() const = 0;
virtual void kiir() const = 0;
};
class Bagoly: public Madar {
static const double bagolySzorzo;
public:
double ertek() const {
return alapAr * bagolySzorzo;
}
void kiir() const {
std::cout << "A bagoly erteke $" << ertek() << std::endl;
}
};
class Papagaj: public Madar {
static const double papagajSzorzo;
public:
double ertek() const {
return alapAr * papagajSzorzo;
}
void kiir() const {
std::cout << "A papagaj erteke $" << ertek() << std::endl;
}
};
class Vocsok: public Madar {
static const double vocsokSzorzo;
public:
double ertek() const {
return alapAr * vocsokSzorzo;
}
void kiir() const {
std::cout << "A vocsok erteke $" << ertek() << std::endl;
}
};
}
#endif // __MADAR_H
// Madar.cpp
#include "Madar.h"
namespace MadarGyujtemeny {
const double Madar::alapAr = 50;
const double Bagoly::bagolySzorzo = 0.03;
const double Papagaj::papagajSzorzo = 2.4;
const double Vocsok::vocsokSzorzo = 1.2;
}
// Main.cpp
#include <iostream>
#include "Madar.h"
using namespace std;
using namespace MadarGyujtemeny;
int main() {
Madar *P[3];
P[0] = new Bagoly();
P[1] = new Papagaj();
P[2] = new Vocsok();
for (int i = 0; i < 3; i++) {
P[i]->kiir();
delete P[i];
}
return 0;
}