스마트웹앱콘텐츠전문가/C++

[가상 함수와 다중 상속 : 상속의 개념 연장선]

9D4U 2019. 1. 14. 18:27
728x90
반응형

- 오버라이딩(Overriding) : 자식 클래스에서 부모 클래스를 상속하는 관계에서 부모 클래스에서 정의한 멤버 함수를 자식 클래스에서 다시 정의해서 사용하는 것을 의미함.

  여기서 문제는 함수 오버라이딩을 하게 되면 부모 클래스와 자식 클래스 모두 동일한 이름의 멤버 함수를 사용할 수 있는데, 어떤 경우에 부모의 멤버 함수를 호출할 것인지,

  아니면 자식의 멤버 함수를 호출할 것인지 혼동할 수 있음 -> 이러한 문제를 해결하기 위해서 '가상 함수'를 제공하고 있음.

- 일반적으로 가상 함수를 가지고 있는 클래스의 경우, 자식 클래스에서만 가상 함수를 구현하고 부모 클래스에서는 가상 함수를 구현하지 않는 경우가 있는데 이때 순수 가상 함수를 가용할 수 있음.

  순수 가상 함수가 있는 클래스를 추상 클래스(Abstract Class)라고 부르는데 이러한 추상 클래스를 상속받는 자식 클래스에는 순수 가상 함수를 반드시 구현해야 함.


○ 가상 함수(Virtual Function)

- 멤버 함수의 재정의(오버라이딩) : 자식 클래스에서 부모 클래스에서 오버라이딩된 멤버 함수를 호출하고 싶은 경우에는 부모 클래스의 이름 뒤에 "::"을 붙여서 호출하면 됨.

  예시) ParentsClass::멤버 함수명(변수 리스트)

- 클래스에서 가상 함수를 선언하기 위해서는 virtual 키워드를 사용함.

  예시) class 부모 클래스{ virtual 멤버 함수_이름();}

○ 순수 가상 함수

- 일반적으로 부모 클래스의 함수나 가상 함수믐 부모 클래스에서 반드시 구현해야 함.

  그러나, 경우에 따라서 부모 클래스에서 구현해도 별 필요 없는 경우가 있음.

  이런 경우에, 가상 함수 선언부의 뒷 부분에 '=0'을 붙여서 '순수 가상 함수'를 만들어서 해결할 수 있음.

  이러한 순수 가상 함수를 가지고 있는 부모 클래스를 추상 클래스라고 함.

- 순수 가상 함수는 함수의 구현부가 추가로 필요 없음

※ 순수 가상 함수를 생성 후에는 반드시 자식 클래스에서는 순수 가상 함수를 구현해야 함.

○ 다중 상속 : 부모가 2개 이상인 경우를 다중 상속이라고 함. = 자식 클래스가 3ㅜ 개 이상의 부모 클래스를 상속할 수 있다는 개념.

- 형태 : class 자식 클래스 : public 부모 클래스1, public 부모 클래스2{ /*중간 코드 생략*/ };



※ 가상함수는 부모 클래스에서 반드시 구현해야 함. 하지만 순수 가상 함수는 자식 클래스에서 반드시 구현해야 함.

   순수 가상 함수는 가상 함수와 선언하는 방법이 같지만, 가상 함수 선언부 뒤에 '=0'을 추가해야 함.

728x90

'스마트웹앱콘텐츠전문가 > C++' 카테고리의 다른 글

[객체 지향 언어의 특징][상속]  (0) 2019.01.14
[friend와 연산자 오버로딩]  (0) 2019.01.11
[객체배열과 객체포인터]  (0) 2019.01.10
함수  (0) 2019.01.09
기초구문  (0) 2019.01.08