본문 바로가기
42seoul/circle-4

[ CPP04 ] 0. 과제이해하기

by saniii 2022. 8. 2.

다형성과  추상클래스, 인터페이스

 

다형성 : 하나의 인터페이스에 대한 서로 다른 모양의 구현

 


 

ex00  다형성

 

모든 문제에서 복잡한 test들을 만들어왔다. 

각 클래스의 생성자와 소멸자들은 각각의 메세지들을 표현해야한다. 모든 클래스들을 같은 메세지를 사용해서 출력하도록 하면 안된다. 

 

Animal이라는 기본 클래스를 구현하고 이건 하나의 protected 속성을 가진다. 

  • std::string type;

 

Animal을 상속받는 Dog을 구현해라

Animal을 상속받는 Cat을 구현해라

 

이 두 파생클래스는 그들의 이름에 따른 type필드를 정해야한다. 그리고 Dog의 type은 Dog로  Cat으 ㅣtype은 cat으로 초기화되어야 한다. Aminial 클래스의 type은 비워져 있거나 값을 채우거나 둘다 된다. 구현하는 사람 마음대로 하세욤.

 

모든 동물은 그들의 멤버 함수 makeSound() 를 사용할 수 있다. .

 이 함수는 적절한 울음소리를 출력한다. 

 

 

내가  이 과제가 동작하는 원리를 제대로 인지했는지 보여주기 위해 WrongAnimal 클래스를 상속받는 WrongCat 클래스를 만들어라

동물과 캣을 Wrong 버전으로 교체하면 Wrong버전의 sound가 나야한다. 

 

주어진 것보다 test를 더 넣어라,

 


  • virtual
    • 컴파일러에게 자신에 대한 호출 바인딩을 실행 시간까지 미루도록 지시하는 키워드
  • 파생 클래스에서 기본 클래스의 가상함수를 재정의하는 것을 오버라이딩이라고 한다. 

 

 

 


ex01 

 

각 클래스마다 생성자와 소멸자에서 다른 메세지를 출력해야한다. 

 

Brain클래스를 구현해라. 이 클래스는 std::string ideas 배열 [100] 을 가진다. 

그리고 (위의 ) 개와 고양이들은 private Brain*  속성을 가질 것이다.

생성자에서 개와 고양이는 new Brain();을 사용해서 그들의 Brain을 생성한다. 

소멸자에서 개와 고양이는 그들의 Brain을 delete 한다. 

 

 메인 함수에서 Animal 객체의 배열을 만들고 반은 Dog이고 반은 Cat 객체로 채워라.  

프로그램 실행이 끝날 때 이 배열을 돌면서 모든 animal을 delete해라.

cat과 dog을 animal로 직접 삭제해야한다. 

적절한 소멸자가 불려야만 한다. 

 

메모리 누수 체크하는 거 잊지말고!!!!!!

 

개와 고양이의 복사는 shallow복사여서는 안된다. 복사생성자가 deepcopy가 맞는지 test해라.

 

주어진 것보다 더 많은 Test를 생성해라.

 

 

 


 

 

ex02  추상클래스

 

 

동물 객체를 만드는 것은 결국 말이 안된다. 그들은 소리를 내지 않는다!

 

가능한 실수를 피하기 위해서 기본 동물 클래스는 인스턴스화되어서는 안된다. 

 

동물 클래스를 고쳐서 아무도 인스턴스화할 수 없도록 해라. 모든 것은 전과 같이 동작해야한다. 

 

만약 네가 원한다면 Animal에 A접두사를 추가해서 클래스 이름을 업데이트할 수 있다. 

 

 


# 추상클래스 (abstract)

: 하나 이상의 순수 가상 함수를 가진 클래스

  • 상속을 위한 기본 클래스로 활용 (인터페이스)
  • 인스턴스화 할 수 없다. 

 

# 순수 가상 함수 

: 코드가 없고 선언만 있는 가상 함수

 

 

 

 

 

 

 

 

 

 

'42seoul > circle-4' 카테고리의 다른 글

[ CPP06 ] 0. 과제이해하기  (0) 2022.08.06
[ CPP05 ] 0. 과제이해하기  (0) 2022.08.03
[ CPP03 ] 0. 과제이해하기  (0) 2022.08.01
[NetPractice] 01. need to know  (0) 2022.07.31
[ CPP02 ] 0. 과제이해하기  (0) 2022.07.30

댓글