3️⃣ 필수 기능 가이드
- Animal이라는 기본 클래스를 정의 합니다.
- Animal 클래스에는 makeSound()라는 순수 가상 함수를 포함합니다.
- Animal 클래스를 상속받아 다양한 동물 클래스를 생성합니다.
- 예) Dog, Cat, Cow
- 각 동물 클래스에서 makeSound()함수를 재정의하여 해당 동물의 소리를 출력하면 됩니다!
- 예) Dog, Cat, Cow
- 메인 함수에서 Animal 타입의 포인터 배열을 선언하고 Dog, Cat, Cow를 각각 배열의 원소로 선언합니다. → 이후 Animal 배열을 반복문으로 순회하면서 각 동물의 울음소리를 내게 합니다!
4️⃣ 도전 기능 가이드
- 필수 기능 가이드에 있는 요구사항을 만족하는 코드를 구현했다면 아래 코드 스니펫을 보고 요구사항대로 Zoo 클래스를 정의해주세요!
class Zoo {
private:
Animal* animals[10]; // 동물 객체를 저장하는 포인터 배열
public:
// 동물을 동물원에 추가하는 함수
// - Animal 객체의 포인터를 받아 포인터 배열에 저장합니다.
// - 같은 동물이라도 여러 번 추가될 수 있습니다.
// - 입력 매개변수: Animal* (추가할 동물 객체)
// - 반환값: 없음
void addAnimal(Animal* animal);
// 동물원에 있는 모든 동물의 행동을 수행하는 함수
// - 모든 동물 객체에 대해 순차적으로 소리를 내고 움직이는 동작을 실행합니다.
// - 입력 매개변수: 없음
// - 반환값: 없음
void performActions();
// Zoo 소멸자
// - Zoo 객체가 소멸될 때, 동물 벡터에 저장된 모든 동물 객체의 메모리를 해제합니다.
// - 메모리 누수를 방지하기 위해 동적 할당된 Animal 객체를 `delete` 합니다.
// - 입력 매개변수: 없음
// - 반환값: 없음
~Zoo();
};
- 랜덤으로 동물 객체를 반환하는 createRandomAnimal()함수를 구현하세요 자세한 사항은 아래 코드 스니펫을 참조하시면 됩니다!
#include <cstdlib>
#include <ctime>
// 랜덤 동물을 생성하는 함수
// - 0, 1, 2 중 하나의 난수를 생성하여 각각 Dog, Cat, Cow 객체 중 하나를 동적으로 생성합니다.
// - 생성된 객체는 Animal 타입의 포인터로 반환됩니다.
// - 입력 매개변수: 없음
// - 반환값: Animal* (생성된 동물 객체의 포인터)
Animal* createRandomAnimal();
내가 작성한 코드
//Animal이라는 기본 클래스 안에 makeSound() 라는 "순수 가상 함수"
//Animal 클래스를 상속받은 Dog,Cat,Cow 클래스 존재. -> 오버라이딩을 이용하여 makeSound() 함수 재정의
//메인함수에서 Animal타입의 포인터 배열 선언, 2번째 줄의 동물들을 배열의 원소로 선언.
//반복문으로 순회-> 각 동물의 울음소리 출력
//Zoo라는 또 다른 클래스
//=>동물들을 동물원에 추가하고 울음소리 출력 +소멸자
//createRandomAnimal 함수 추가()
//0, 1, 2 중 하나의 난수를 생성 각각 Dog, Cat, Cow 객체 중 하나를 동적으로 생성
#include <iostream>
using namespace std;
class Animal {
public:
virtual void makeSound() =0; //순수 가상 함수 (=0 이용)
virtual ~Animal() {};
};
class Dog : public Animal {
public://Animal의 자식클래스인 Dog에서 makeSound()함수 재정의 => override 함수 사용
void makeSound() override { cout << "Woof!" << endl; }
};
class Cat : public Animal {
public://Animal의 자식클래스인 Cat에서 makeSound()함수 재정의 => override 함수 사용
void makeSound() override { cout << "Meow!" << endl; }
};
class Cow : public Animal {
public://Animal의 자식클래스인 Cow에서 makeSound()함수 재정의 => override 함수 사용
void makeSound() override { cout << "Moo!" << endl; }
};
//도전 기능//////////////////////////////////
class Zoo {
private:
Animal* animals[10];
int animalCount=0;
public:
//동물원에 동물 추가
void addAnimal(Animal* animal) {
if (animalCount < 10) { animals[animalCount++] = animal; }
else { cout << "배열 크기 초과" << endl; }
}
//makeSound 함수 실행
void performActions() {
for (int i = 0; i < animalCount; i++) {
animals[i]->makeSound(); //소리 출력
}
}
//Zoo 소멸자
~Zoo() {
for (int i = 0; i < animalCount; i++) {
delete animals[i];
}
}
};
//랜덤으로 동물 객체 반환.
Animal* createRandomAnimal() {
int random = rand() % 3;
if (random == 0) { return new Dog; }
else if (random == 1) { return new Cat; }
else { return new Cow; }
}
int main() {
Zoo z; //Zoo 객체 생성
srand(time(0));//시간을 이용해서 랜덤값 초기화
for (int i = 0; i < 10; i++) {//랜덤으로 동물 객체 지정, 10개 제한
z.addAnimal(createRandomAnimal());
}
z.performActions();//makeSound 함수 실행, 동물 울음소리 출력
return 0;
}
'내일배움캠프🔥 > 퀘스트✔️' 카테고리의 다른 글
[ 내일배움캠프 ] 4. C++ Summary (0) | 2025.01.04 |
---|---|
[ 내일배움캠프 ] 3. 템플릿 및 STL (0) | 2025.01.03 |
[ 내일배움캠프 ] 1. 간단한 프로그래밍 구현하기 (0) | 2024.12.30 |
[ 내일배움캠프 ] 내가 생각한 게임 개발자는? 🎮 (0) | 2024.12.12 |