phpclass/객체정보2000. 12. 28. 15:01
순수가상함수(pure virtual function)
C++ 에서 함수 몸체가 없이 정의되는 함수이며 몸체 부분을 =0으로 지정하여야 합니다. 순수가상함수가 포함된 클래스를 추상클래스(Abstract Class)라고 하며, 이 추상클래스로는 직접 객체를 만들 수 없고 상속을 통해 다른 클래스를 생성하는 데 사용합니다. 추상클래스로부터 상속받은 클래스는 반드시 순수가상함수를 구현해야 합니다.
[code c;gutter:false] virtual void breathe(void) = 0; // 순수가상함수(메소드의 몸체는 없음) [/code]
추상클래스 정의
자바에서처럼 추상클래스를 구분하는 abstract와 같은 키워드는 없으며, 단지 클래스에 하나 이상의 순수가상함수가 있다면 그것을 추상클래스라고 합니다.
[code c;gutter:false] //
// 추상클래스 animal
//
class animal {
public:
virtual void breathe(void) = 0; // 순수가상함수
}; [/code]
순수가상함수의 오버라이드
하위클래스를 정의할 때는 순수가상함수 breathe()를 오버라이드해야 합니다. C++는 객체를 설정할 때 순수가상함수를 오버라이드하지 않는 것을 에러로 여깁니다. 즉, 한 클래스가 하나나 그 이상의 순수가상함수를 가진다면 그 클래스의 객체를 생성할 수 없습니다.
[code c;gutter:false] //
// 추상클래스 animal로부터 파생된 일반클래스 fish
//
class fish : public animal {
public:
void breathe(void);
} my_fish;

//
// 순수가상함수 breathe()의 오버라이드
//
void fish::breathe(void) {
cout << "Bubbling...\n";
} [/code]
추상클래스 예제
[code c;gutter:false] #include <iostream.h>
#include <conio.h>

//
// 추상클래스 animal
//
class animal {
public:
void eat(void); // 일반메소드
virtual void breathe(void) = 0; // 순수가상함수
};

//
// 추상클래스 animal로부터 파생된 일반클래스 fish
//
class fish : public animal {
public:
void breathe(void);
} my_fish;

//
// 모든 멤버함수 선언
//
void animal::eat(void) {
cout << "Eating...\n";
}

void fish::breathe(void) {
cout << "Bubbling...\n";
}

//
// 프로그램의 최초 진입점
//
main() {
my_fish.breathe();
getche();
return 0;
} [/code]
이 경우에 프로그램은 fish::breathe()함수를 수행하게 됩니다. 따라서 "Bubbling..."이 화면에 표시됩니다.
C++에서의 추상클래스에 대한 좀 더 자세한 정보는 관련 서적을 참고하시기 바랍니다.

'phpclass > 객체정보' 카테고리의 다른 글

{추상클래스}6.세셔너 확장  (0) 2000.12.28
{추상클래스}5.세셔너 분석  (0) 2000.12.28
{추상클래스}4.PHP  (0) 2000.12.28
{추상클래스}3.자바  (0) 2000.12.28
{추상클래스}1.개요  (0) 2000.12.28
Posted by 방글24