반응형
[C++] 가상 함수(Virtual Function), 순수 가상 함수(Pure Virtual Function)
가상 함수(Virtual Function)와 순수 가상함수(Pure Virtual Function)
공통점
1. 클래스 상속 관계에서 사용된다.
2. 멤버 함수를 재정의 할 수 있다. (오버라이딩)
차이점
1. 순수 가상 함수는 자식 클래스에서 반드시 재 구현해야 한다.
2. 가상 함수는 부모 클래스에서 구현부를 포함하고 있기 때문에 재 구현을 꼭 필요로 하지 않는다.
3. 순수 가상 함수는 함수 선언 뒷 부분에 " = 0 "를 추가 해야 한다.
4. 추상 클래스는 객체를 생성할 수 없다.
5. 순수 가상 함수는 함수의 구현부가 없다. (자식 클래스에게 인터페이스만을 제공한다.)
> 구현부를 넣어봤는데 이게 되네?하는게 있음...
참고 사항
1. 순수 가상 함수를 가지고 있는 부모 클래스를 추상 클래스라고 부른다.
2. 가상 함수를 재 정의한 후에 부모 클래스에 있는 함수를 호출하고 싶다면 함수 앞 부분에 (부모클래스명::)을 붙여준다.
#include <iostream>
using namespace std;
// 가상 함수 클래스
class VirtualFunction
{
public:
virtual void Test()
{
cout << "VirtualFunction" << endl;
}
};
// 순수 가상 함수 클래스
class PureVirtualFunction
{
public:
// 순수 가상 함수
virtual void Test() = 0;
/*virtual void Test() = 0
{
이게 되네??????
cout << "PureVirtualFunction" << endl;
}*/
};
// 가상 함수 클래스 상속
class ChildClass : public VirtualFunction
{
public :
// 오버라이딩
void Test()
{
cout << "VirtualFunction Overriding" << endl;
}
};
// 순수 가상 함수 클래스 상속
class PureChildClass : public PureVirtualFunction
{
public:
// 오버라이딩
void Test()
{
cout << "PureVirtualFunction Overriding" << endl;
}
};
int main()
{
ChildClass cc;
PureChildClass pcc;
VirtualFunction vf; // 객체 생성 가능
//PureVirtualFunction pvf; // 객체 생성 불가
cc.Test(); // 오버라이딩 된 결과 출력
cc.VirtualFunction::Test(); // 부모 클래스에 있는 가상 함수 출력
pcc.Test(); // 오버라이딩 된 결과 출력
return 0;
}
반응형
'Programming > C, C++' 카테고리의 다른 글
C++ #define, 매크로 (0) | 2022.12.06 |
---|---|
카멜 표기법, 스네이크 표기법 (0) | 2022.12.06 |
C++ 연산자 오버로딩 (0) | 2022.11.17 |
C++ 클래스 private접근, Friend 지정 사용 (0) | 2022.11.17 |
C++ 오류 해결 Error:C4996, strcpy, strncpy 사용시 에러 발생 (0) | 2022.11.16 |