- Animal이라는 기본 클래스를 정의 합니다.
- Animal 클래스에는 makeSound()라는 순수 가상 함수를 포함합니다.
- Animal 클래스를 상속받아 다양한 동물 클래스를 생성합니다.
- 예) Dog, Cat, Cow
- 각 동물 클래스에서 makeSound()함수를 재정의하여 해당 동물의 소리를 출력하면 됩니다!
- 예) Dog, Cat, Cow
- 메인 함수에서 Animal 타입의 포인터 배열을 선언하고 Dog, Cat, Cow를 각각 배열의 원소로 선언합니다. → 이후 Animal 배열을 반복문으로 순회하면서 각 동물의 울음소리를 내게 합니다!
일단 상상으로 만들어보자면
1. Animal이라는 안에 makeSound() = 0;라는 순수 가상 함수가 들어있는 부모클래스를 만든다.
2. makeSound를 재정립한 자식 클래스를 만든다. 재정립한 makeSound는 각 동물에 따른 울음소리를 출력.
3. 입력받은 이름을 어떤 동물 종인지 분류해줄 포인터를 이용한 animalCategory라는함수를 만든다.
4. 메인함수에서 Animal 타입의 포인터 배열 선언.(이걸 하면 위에 룬류해주는 함수는 없어도 됨) Animal*animals[size];를 선언하면 Animal 클래스의 animals라는 이름의 size만큼의 원소를 가진 배열 탄생
5. size를 3으로 해놓고 animals를 생성 후 0부터 각 자식클래스에 매칭시켜준다. 이 때 new를 사용
실전
일단 할일을 순서별로 적어준다.
1. makeSound라는 순수 가상함수가 포함된 Animal이라는 부모클래스 생성
특별한건 없다. 가상함수를 만들고 뒤에 =0을 붙여주면 순수 가상함수가 된다.
2. makeSound를 재정립하는 자식 클래스 생성
makeSound라는 부모클래스의 가상함수를 동물의 울음소리를 출력하는 함수로 재정의 해줬다.
여기서 override는 클래스가 부모 클래스의 가상 함수를 재정의(오버라이드)하고 있다는 것을 명시적으로 나타낸다. 가상함수 관련해서 찾다가 알아낸 정보다. 뭐가 가상함수를 재정의한 부분인지 가독성이 높아지고 컴파일 시 정말 부모클래스와 연결이 잘 되어있는지 확인할 수 있다.
밑에 2개는 복사 붙여넣기 후 class이름과 울음소리만 바꿔줬다.
3. main함수에서 Animal클래스의 animals라는 이름의 size = 3의 배열 생성
이전에 했던 정수의 배열에서 int를 class 이름으로 바꿔준 것 뿐이다.
4. animals 배열과 각 자식 클래스를 연결 (new 키워드를 이용해 동적 메모리를 부여하고 다 사용하면 메모리 정리하기)
여기서 처음에는 new를 사용하지 않고 그냥 animals[0] = Dog 로 연결했었다.
지금은 전혀 상관이 없지만 new를 사용해 동적 메모리를 사용하지 않으면 사용하고 난 다음에 3개의 원소를 가진 animals 배열 데이터가 남아있게 되고 이게 점점 큰 프로젝트가 될 수록 쌓여서 프로그램을 무겁게 만들기 때문에 확장성을 위해 new를 이용해 한단계 더 멀리볼 수 있는 프로그래밍을 시도해봤다.
5. for문을 이용해서 각 개체별로 makeSound를 한번씩 하게 하고 delete를 이용해 메모리 정리
for문을 이용해서 각 animals 원소별로 makeSound 함수를 실행하게 하고 다시 for문과 delete를 이용해서 animals원소를 지웠다. 이게 만약 포인터의 배열이 아니라 포인터 배열이였다면 delete[]을 사용해 정리하면 된다.
완성본
실행
아주 잘된다 이번 과제는 문제이해가 정말 오래걸렸고 과제 자체는 그리 어렵지 않았다.
끝!
'C++' 카테고리의 다른 글
C++[아이템을 다른 헤더파일에서 가져와서 사용하기] (0) | 2025.01.14 |
---|---|
C++[텍스트 RPG에서 상점 만들기(2. 구매, 판매)] (0) | 2025.01.13 |
C++ [텍스트 RPG에서 상점 만들기(1. 플로우차트, 상점 입장)] (0) | 2025.01.10 |
C++ [오름차순과 내림차순 정렬] (1) | 2024.12.24 |
C++[숫자 5개를 받아 합계를 내고 평균 구하기] (0) | 2024.12.24 |