Unreal Track 1기 [24.12.26] - OOP Summary(2)

chooha·2024년 12월 27일

TIL

목록 보기
8/60

< 도전 기능 구현 >


1. 문제




2. 완성 코드

▸ 헤더 파일

- Animal.h

#pragma once

class Animal 
{
public:
	virtual void MakeSound() = 0;
};

- Cat.h

#pragma once
#include "Animal.h"

class Cat : public Animal
{
public:
	void MakeSound();
};

- Dog.h

#pragma once
#include "Animal.h"

class Dog : public Animal
{
public:
	void MakeSound();
};

- Cow.h

#pragma once
#include "Animal.h"

class Cow : public Animal
{
public:
	void MakeSound();
};

- Zoo.h

#pragma once
#include "Animal.h"

class Zoo {
private:
    Animal* animals[10]; // 동물 객체를 저장하는 포인터 배열
    int animal_cnt = 0;
public:
    // 동물을 동물원에 추가하는 함수
    void addAnimal(Animal* animal);

    // 동물원에 있는 모든 동물의 행동을 수행하는 함수
    void performActions();
    
    ~Zoo();
};

▸ cpp 파일

- Cat.cpp

#include <iostream>
#include "Cat.h"

void Cat::MakeSound()
{
	std::cout << "Meow!" << '\n';
}

- Dog.cpp

#include <iostream>
#include "Dog.h"

void Dog::MakeSound()
{
	std::cout << "Woof!" << '\n';
}

- Cow.cpp

#include <iostream>
#include "Cow.h"

void Cow::MakeSound()
{
	std::cout << "Moo!" << '\n';
}

- Zoo.cpp

#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];
	}
}

- Main.cpp

#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;
}

3. 체크 포인트

난수 생성

0개의 댓글