CPP03 평가

😎·2022년 12월 29일
0

동료평가

목록 보기
3/4

상속과 관련된 과제를 진행했다! 동료평가...! 42서울의 장점을 다시 한 번 느꼈다. 누군가에게 내가 배운 것을 전달할 수 있다는 것 자체가 정말 좋은 기회다.

"배움은 누가 챙겨주지 않고, 내가 훔쳐 먹는 것이다." by 김태리

클러스터에 가는 길에 김태리 수상소감을 봤다. 공감가는 말이다. CPP 공부를 하고 있다. 다른 사람들이 정리해 놓은 다양한 정보를 서칭하고 다른 사람에게 물어보며, 이해가 잘되는 내용으로 공부하며 배운다. 이 부분이 훔쳐 먹는다는 표현과 어울린다고 생각했다.

42서울에는 동료 평가를 하며 내가 배운 것을 설명한다. 다른 사람에게 내가 배운 것을 전달하는 건 훔쳐 먹은 것을 넘어서, 소화시켜 진정한 내 것으로 만들기 가장 좋은 방법 중 한가지인 것 같다.

이번 평가를 통해 헷갈렸던 부분을 바로 잡을 수 있었다.

  • 오버로딩과 오버라이딩

  • virtual class 와 virtual function


오버라이딩과 오버로딩

  • 오버라이딩은 부모 클래스가 갖고 있는 메서드를 클래스에서 재정의 하는 것을 이야기한다.

  • 오버로딩은 메서드 이름이 같지만 매개 변수의 유형과 개수에 따라 다른 기능을 하게 덮어쓰는 것을 이야기한다.

오버라이딩

아래 코드를 예로 들면, DiamondTrap 클래스는 FragTrap 클래스를 상속 받는다. 그리고 FragTrapDiamondTrapvoid attack(const std::string &target); 이라는 같은 멤버 함수가 있다. 이럴 때 DiamondTrapFragTrapattack 함수를 오버라이딩했다고 할 수 있다.

오버로딩

빨간 박스가 모두 오버로딩 됐다고 볼 수 있다. ClapTrap 이라는 같은 함수이지만, 다른 매개변수와 개수를 갖는다!!

참고 자료

https://private.tistory.com/25


virtual class 와 virtual function

virtual class

가상 클래스는 다이아몬드 상속의 문제를 해결하기 위해 생겼다. 아래 그림을 보면 DiamondTrapScavTrapFragTrap 의 상속을 받는다. 그리고 ScavTrapFragTrap 은 같은 부모 ClapTrap 의 상속을 받는다. 그리고 virtual 옵션이 붙어있다.

virtual 이 없으면 왜 안되는 걸까? virtual 이 없으면 아래 그림의 2번처럼 이뤄진다. 즉, 불필요하게 메모리를 차지하게 되는 것이다. 그래서 virtual 을 붙여줘야한다.

virtual 옵션이 없을 때 어떻게 되는지 보자. Diamond 클래스에서 에러가 발생한다.

참고자료

virtual fucntion

가상 함수는 자식 클래스에서 오버라이딩할 때 발생할 수 있는 문제를 해결하기 위해 생겼다. 아래 그림처럼 Animal 클래스의 상속을 받아 Dog 클래스가 상속을 받았다. 이때 makeSound을 오버라이딩하고 있다.

이때 Dog 클래스로 만들어진 객체가 makeSound 를 호출했을 때, Dog 클래스의 makeSound 호출을 확실히 하기 위해서 Animal 클래스의 makeSound 함수 앞에 virtual을 선언한다. 다르게 이야기하면, 부모 클래스의 멤버 함수에 virtual 이 선언되어있다면 자식 클래스에서 해당 함수를 재정의 할 것이다라고 암시할 수 있는 것이다.

profile
jaekim

0개의 댓글

관련 채용 정보