


#pragma once
class Animal
{
public:
virtual void MakeSound() = 0;
};
#pragma once
#include "Animal.h"
class Cat : public Animal
{
public:
void MakeSound();
};
#pragma once
#include "Animal.h"
class Dog : public Animal
{
public:
void MakeSound();
};
#pragma once
#include "Animal.h"
class Cow : public Animal
{
public:
void MakeSound();
};
#pragma once
#include "Animal.h"
class Zoo {
private:
Animal* animals[10]; // 동물 객체를 저장하는 포인터 배열
int animal_cnt = 0;
public:
// 동물을 동물원에 추가하는 함수
void addAnimal(Animal* animal);
// 동물원에 있는 모든 동물의 행동을 수행하는 함수
void performActions();
~Zoo();
};
#include <iostream>
#include "Cat.h"
void Cat::MakeSound()
{
std::cout << "Meow!" << '\n';
}
#include <iostream>
#include "Dog.h"
void Dog::MakeSound()
{
std::cout << "Woof!" << '\n';
}
#include <iostream>
#include "Cow.h"
void Cow::MakeSound()
{
std::cout << "Moo!" << '\n';
}
#include <iostream>
#include "Zoo.h"
using namespace std;
void Zoo::addAnimal(Animal* animal)
{
if (animal_cnt < 10)
{
animals[animal_cnt] = animal;
animal_cnt++;
cout << "동물을 추가했습니다.\n";
}
else
{
cout << "동물을 더이상 추가할 수 없습니다.\n";
}
}
void Zoo::performActions()
{
for (int i = 0; i < animal_cnt; i++)
{
animals[i]->MakeSound();
}
}
Zoo::~Zoo()
{
for (int i = 0; i < animal_cnt; i++)
{
delete animals[i];
}
}
#include <iostream>
#include <random>
#include "Cat.h"
#include "Dog.h"
#include "Cow.h"
#include "Zoo.h"
using namespace std;
// 랜덤 동물을 생성하는 함수
// - 0, 1, 2 중 하나의 난수를 생성하여 각각 Dog, Cat, Cow 객체 중 하나를 동적으로 생성합니다.
Animal* createRandomAnimal()
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> dis(0, 2);
unsigned int selection = dis(gen);
switch (selection)
{
case 0:
return new Dog();
case 1:
return new Cat();
case 2:
return new Cow();
default:
return nullptr;
}
}
int main()
{
Zoo nbc_zoo;
for (int i = 0; i < 11; i++)
{
nbc_zoo.addAnimal(createRandomAnimal());
}
nbc_zoo.performActions();
return 0;
}