C & C++/C++
[C++] virtual 가상함수 (생성자)
키플레이어
2019. 11. 6. 10:09
반응형

가상함수: 기본 클래스의 멤버함수를 정의할때 그 함수가 가상함수라면, 파생클래스가 상속받았을때 재정의되는 함수
- 일반 상속관계 class
class AAA{
public:
void Print() {
cout << "AAA Print함수 콜" << endl;
}
};
class BBB : public AAA{
public:
void Print(){
cout << "BBB Print함수 콜" << endl;
}
};
int main(void){
AAA* vertual_val;
AAA chk1;
BBB chk2;
vertual_val = &chk1;
vertual_val->Print();
vertual_val = &chk2;
vertual_val->Print();
return 0;
}
결과:
AAA Print함수 콜
AAA Print함수 콜
- virtual 함수를 사용한 상속 class
class AAA{
public:
virtual void Print() { //가상함수
cout << "AAA Print함수 콜" << endl;
}
};
class BBB : public AAA{
public:
virtual void Print(){ //가상함수
cout << "BBB Print함수 콜" << endl;
}
};
int main(void){
AAA* vertual_val;
AAA chk1;
BBB chk2;
vertual_val = &chk1;
vertual_val->Print();
vertual_val = &chk2;
vertual_val->Print();
return 0;
}
결과:
AAA Print함수 콜
BBB Print함수 콜
부모클래스의 함수가 가상함수일 경우 오버라이딩된 자식클래스 함수에 정의를 한다고 할 수 있습니다.
가상함수에서는 함수의 선언만하고 정의는 오버라이딩된 자식클래스의 함수에 정의
소멸자 참고
https://coding-house.tistory.com/29
[C++] virtual 가상함수 (소멸자)
소멸자 virtual을 쓰는 이유는? 상속하고 있는 클래스를 타입이 다른 포인터로 소멸할때 virtual이 없으면 오버라이딩 현상이 적용되지 않아 메모리 해제에 있어 메모리 누수(leak) 발생 class classA{ public: c..
coding-house.tistory.com
반응형