
이미 Animal 이라는 추상 클래스가 있다고 가정하면
그냥 똑같이 간단하게 추가하면 끝나는 문제 아닌가..?

#include <iostream>
#include <vector>
using namespace std;
// 기본 Animal 클래스 (수정 금지)
class Animal {
public:
virtual void speak() = 0; // 순수 가상 함수
virtual ~Animal() = default; // 가상 소멸자
};
// Dog 클래스 (이미 구현됨)
class Dog : public Animal {
public:
void speak() {
cout << "Woof! Woof!" << endl;
}
};
// Cat 클래스 (이미 구현됨)
class Cat : public Animal {
public:
void speak() {
cout << "Meow! Meow!" << endl;
}
};
// Bird 클래스 (새로운 클래스 추가)
class Bird : public Animal {
public:
void speak() {
cout << "Chirp! Chirp!" << endl;
}
};
// 동물의 소리를 출력하는 함수 (수정 금지)
void makeAnimalsSpeak(vector<Animal*> &animals) {
for (Animal* animal : animals) {
animal->speak();
}
// 동적으로 할당된 메모리를 해제합니다.
for (Animal* animal : animals) {
delete animal;
}
}
int main() {
vector<Animal*> animals;
animals.push_back(new Dog());
animals.push_back(new Cat());
// Bird 객체 추가
animals.push_back(new Bird());
makeAnimalsSpeak(animals);
return 0;
}
동작 구조는 결국 비슷하다