본문 바로가기

hacking or software engineering skills/programming

c++ polymorphism

728x90

c++ 다형성

 

개념이 잘 이해가 안 가서 정리

 

c++은 상속성(inheritance)을 갖고 있기에,

 

기본클래스와 파생클래스가 있다.

 

이때 기본클래스 타입의 포인터를 이용하면 파생클래스또한 같이 다룰 수 있다.

단, 기본클래스 내에서 virtual function으로 정의 된 함수를 파생클래스에서 따로 정의하였을 때만 결과가 달라진다.

 

ex) Shape 이란 기본 클래스와 Rectangle이란 파생클래스에서

Shape shape;

Rectangle rectangle;

Shape** pointers = new Shape*[2];

pointers[0] = &shape;

pointers[1] = &rectangle;

-> 이렇게 기본클래스 타입의 포인터는 파생클래스 포인터를 저장할 수 있고.

pointers[1] 사용할 수 있는 기능은 기본클래스에서 가상함수로써 정의된 것이어야 한다.

 

기본클래스로 저장되어 있어도 실행될 때는 각각의 implementation을 호출한다.

 

virtual function call -> vfptr 를 콜하고 여기엔 address를 확인한다.

 

참조 : http://ddmix.blogspot.kr/2014/11/cppalgo-2-cpp-overview.html