순수 가상함수

보물창고·2021년 8월 6일
0

순수 가상함수란?

정의

virtual 키워드가 붙은 가상함수의 정의부를 생략하고,
함수명 옆에 = 0을
붙이거나 abstact를 붙임으로써, 해당 클래스를 객체화할 수 없는
추상클래스로 만드는 함수.

예시

  • abstract 키워드 사용

  • = 0 사용

용도

: 파생클래스에서 순수가상함수가 있는 클래스를 상속함으로써,
반드시 해당 기능을 구현해야 한다는 것을 나타내는 역할을 합니다.
기능을 구현하지 않으면 컴파일이 에러 발생시킨다.

특징

  • 순수 가상함수를 하나라도 가지고 있으면 해당 클래스는 추상 클래스가 된다.

  • 추상클래스는 객체화할 수 없다.
    언어적으로도 abstact 이므로 구체화할 수 없으며, 선언부를 정의하지 않았기 때문에 함수 호출이 불가능하다.
    -> 추상클래스를 상속받으면, 반드시 함수를 오버라이드 해야한다.

  • 추상클래스를 통해 유저가 편리하게 클래스를 재정의할 수 있다.
    -> 반드시 재정의해야 한다.

  • 재정의해야 한다!

    -> 파생클래스는 추상클래스의 순수가상함수를 통해서 구체화해야 할 함수를
    미리 파악할 수 있다.

추상화클래스를 만들때 Tip

: 효과적으로 만들기 위한 작업이다. 반드시는 아니지만, 효과적!

  • 함수를 정의하지 말자

  • 멤버 변수를 만들기 말자.

  • 예를 들자면
    Animal 클래스에서 공통적인 동작을 이루는 walk 함수를 만들고,
    공통적인 변수들도 구성함, 하지만 추상클래스일 경우이다.


-> 이상없다.

회사에서 갑자기 돌고래를 만들어 달라고 할때 문제가 생긴다.
왜냐하면 돌고래는 걷지도 못하고, 다리도 없기 때문이다.
오히려 돌고래는 지느러미가 있다.


-> walk함수를 재정의해야 한다.

  • 다리가 없으니, 새롭게 돌고래에 변수를 만들어야 하고, animal에서의 변수는 사용도 하지 않게된다.

  • 돌고래 뿐만이 아니라 닭 등등 추가할 경우 돌고래와 같은 문제가 발생한다.
    따라서 추상클래스에서는 순수가상함수만 선언하고, 멤버변수는 사용하지 말고,
    오버로딩 용도로 사용할? 예정인 함수들에 대한 정의도 하지 말자!

  • 효율적인 추상클래스

-> 중복이 되는 클래스의 함수의 경우는 따로 구현 함수를 만들고 다중 상속을
함으로써 중복을 방지할 수 있다.

profile
🔥🔥🔥

0개의 댓글