-
Polymorphism, Virtual, Dynamic Biding카테고리 없음 2014. 1. 17. 23:59
- Polymophism의 개념
상속관계에 있는 Class에서 (A<B<C)
Base Class의 Pointer를 이용하여drived class의 객체를 생성하는 것.
이 때 중요한 것은 같은 이름의 member function의 우선 순위는 상위에서 시작한다.
같은 이름의 Member의 우선 순위는 하위 멤버가 먼저이다.
이때 Member Function을 호출하는 방법이 Dynamic Binding인데 이는 Runtime에 Overide된 함수가 결정이 되어 바인딩이 되기 때문이다.
- 위의 개념을 함수 overriding과 함수 redefine 이 사용이 되는 데 같이 Override로 혼용하기도 하는데 C++에서는
Function redefine은 based class에 같은 function이 있을 때
Function Overiding은 Base class에서 같은 항수가 virtual로 정의될 때이다.
- Polymorphism을 사용하는 가장 좋은 예가
Base Class를 pure virtual member function으로 구현하고 실제 member function을 하위클래스에서 구현하고 Base Class으로 객체를 생성하는 방법이다.
Person p = Student(name, student_id, score);
p.getName() ; OK
p.getScore() : OK (getScore() is defined as a virtual);
// 개념상으로는 이것만이 Polymorphism이라고 말하면 안된다. 그러나 C++ Program을 하는 입장에서는 이렇게 Program 하는 것이 바람직하다고 생각만 하면 된다.
- Pure Virtual Function있는 Class에서 중요한 것
반드시 virtual destructor를 습관적으로 써주어야 한다.
그렇지 않으면 Destructor 자체는 Base Class의 것만이 호출된다.
- Polymorphism의 반대 방향은 불가능하다. (이게 정답)
Student s = person(name); // NOK
그러나 pointer를 이용해서 할 수는 있다.
Person* p = new Person(name);
Student * s = static_cast<Student>(p);