반응형
가상함수: 기본 클래스의 멤버함수를 정의할때 그 함수가 가상함수라면, 파생클래스가 상속받았을때 재정의되는 함수
- 일반 상속관계 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 & C++ > C++' 카테고리의 다른 글
[C++] virtual 가상함수 (소멸자) (0) | 2019.11.06 |
---|---|
[C++] 바인딩 (정적 바인딩 & 동적 바인딩) (0) | 2019.11.05 |
[C++] 생성자&소멸자의 오버로딩/오버라이딩 (0) | 2019.11.05 |
[C++] 구조체/클래스 차이 (0) | 2019.11.05 |
[C++] 구조체 사용 방법 및 C와 C++의 구조체 차이 (0) | 2019.11.05 |