#include <iostream>
#include <memory>
#include <vector>
#include <string>
class Owoc
{
public:
Owoc(std::string const& kraj) :
kraj_(kraj)
{
std::cout << "Nowy owoc.\n";
}
virtual ~Owoc()
{
std::cout << "Kasuje owoc.\n";
}
virtual void wypisz() = 0;
protected:
std::string kraj_;
};
class Banan : public Owoc
{
public:
Banan(std::string const& kraj) : Owoc(kraj)
{
std::cout << "Banan\n";
}
~Banan()
{
std::cout << "Kasuje banana.\n";
}
virtual void wypisz() final
{
std::cout << "Jestem bananem i jestem zolty, kraj pochodzenia: "
<< kraj_ << std::endl;
}
};
class Truskawka : public Owoc
{
public:
Truskawka(std::string const& kraj) : Owoc(kraj)
{
std::cout << "Truskawka\n";
}
~Truskawka()
{
std::cout << "Kasuje truskawke.\n";
}
virtual void wypisz() final
{
std::cout << "Jestem truskawka i jestem czerwona, kraj pochodzenia: "
<< kraj_ << std::endl;
}
};
int main() {
std::vector<std::unique_ptr<Owoc> > owoce;
owoce.emplace_back(new Banan("Etiopia"));
owoce.emplace_back(new Truskawka("Polska"));
std::cout << "Wypisz owoce:\n";
for(auto const& o : owoce)
o->wypisz();
return 0;
}