다음 표는 가상 기능과 순수 가상 기능의 차이점을 보여줍니다.
| 가상 기능 | 순수 가상 기능 |
|---|---|
| 가상 함수는 클래스에 정의가 있습니다. | 순수 가상 기능에는 정의가 없습니다. |
| 선언:virtual funct_name(parameter_list) {. . . . .}; | 선언:virtual funct_name(parameter_list)=0; |
| 파생 클래스의 개념이 없습니다. | 클래스에 하나 이상의 순수 가상 함수가 포함되어 있으면 추상으로 선언됩니다. |
| 필요한 경우 기본 클래스가 가상 기능을 재정의할 수 있습니다. | 순수 가상 함수의 경우 파생 클래스는 순수 가상 함수를 확실히 재정의해야 합니다. |
가상 기능
예시 코드
#include <iostream>
using namespace std;
class B {
public:
virtual void s() //virtual function {
cout<<" In Base \n";
}
};
class D: public B {
public:
void s() {
cout<<"In Derived \n";
}
};
int main(void) {
D d; // An object of class D
B *b= &d;// A pointer of type B* pointing to d
b->s();// prints"D::s() called"
return 0;
} 출력
In Derived
순수 가상 기능
예시 코드
#include<iostream>
using namespace std;
class B {
public:
virtual void s() = 0; // Pure Virtual Function
};
class D:public B {
public:
void s() {
cout << " Virtual Function in Derived class\n";
}
};
int main() {
B *b;
D dobj; // An object of class D
b = &dobj;// A pointer of type B* pointing to dobj
b->s();// prints"D::s() called"
} 출력
Virtual Function in Derived class