반응형
오버라이딩
#include <iostream> using namespace std; class Parent{ public: void Parentmethod(){ cout<<"parent"<<endl; } }; class Child:public Parent{ public: void Parentmethod(){ cout<<"child"<<endl; } }; int main() { Parent *Pptr=new Child(); Pptr->Parentmethod(); return 0; }
위는 Child 객체를 생성하고 Parent자료형으로 포인터를 지정하는 코드이다. 이 예시를 통해 C++은 포인터의 자료형으로 연산 가능여부를 결정한다. 서로 상속관계에 있고 자료형만 맞다면 부모클래스건 자식 클래스건 포인터 지정은 상관없다. 그리고 이속에서도 오버라이딩에 예시가 담겨 있다.
#include <iostream> using namespace std; class First{ public: virtual void Func(){cout<<"FirstFunc"<<endl;} }; class Second:public First{ public: virtual void Func(){cout<<"SecondFunc"<<endl;} }; class Third:public Second{ public: virtual void Func(){cout<<"ThirdFunc"<<endl;} }; int main(){ Third *tptr=new Third(); Second *sptr=tptr; First *fptr=sptr; fptr->Func(); sptr->Func(); tptr->Func(); return 0; }
상속관계에서 클래스마다 같은 이름임에도 불구하고 다른 기능을 구현하기 위해서 사용한다. 가상함수를 사용하여 오버라이딩 할 수 있다. 가상함수를 사용하지 않는다면 자료형을 기준으로 함수를 호출하겟지만 가상함수를 사용하면 객체를 참조하여 객체에 맞는 자료형의 함수 호출 대상을 결정한다.
728x90
반응형
댓글