[C++ 문법] '추상 클래스'
Java에서는 '추상 메서드'를 가진 클래스를 '추상 클래스'라고 말합니다. 용어만 다를뿐 C++도 같은 맥락입니다. C++에서는 '순수 가상 함수'를 가진 클래스를 '추상 클래스'라고 말합니다. 그렇다면 '순수 가상 함수'란 무엇일까요?
'순수 가상 함수'란 선언은 지금하되 정의는 '자식 클래스'에 위임하는 함수입니다. '가상 함수' 선언 끝부분에 '=0'이라는 표기가 붙습니다.
virtual int GetData() const = 0;
'추상 클래스'의 장점은 자신을 상속 받을 여러 '자식 클래스'들의 인터페이스를 통일시켜줄 수가 있다는 것입니다.
// 초기 제작자의 코드
class MyObject {
protected:
int m_nDeviceID;
public:
MyObject() { /* do somthing */ }
virtual ~MyObject() { /* do somthing */ }
virtual int GetDeviceID() = 0; // '순수 가상 함수'를 선언합니다.
};
// 초기 제작자가 만든 함수
void PrintID(MyObject* obj) {
cout << "DeviceID: " &t;< obj->GetDeviceID() << endl;
}
// 후기 제작자의 코드
class MyTV : public MyObject {
public:
MyTV(int nID) { m_nDeviceID = nID; }
virtual int GetDeviceID() { return m_nDeviceID; }
};
class MyPhone : public MyObject {
public:
MyPhone(int nID) { m_nDeviceID = nID; }
virtual int GetDeviceID() { return m_nDeviceID;
};
// 사용자 코드
void main() {
MyTV a{ 10 };
MyPhone b{ 20 };
// '자식 클래스'들의 인터페이스를 통일시켰기 때문에 어떤 인스턴스든 넣을 수 있습니다.
// 이게 가능한 이유는 '부모 클래스' 참조자는 '자식 클래스' 객체를 참조할 수 있기 때문입니다.
// 그리고 '가상 함수'는 '실 형식'에서 재정의된 것이 호출되기 때문입니다.
::PrintID(&a);
::PrintID(&b);
}
'Programming > C C++' 카테고리의 다른 글
[C++ STL] '시퀀스 컨테이너 - vector' (0) | 2019.05.25 |
---|---|
[C++ 문법] 'friend' 예약어 (0) | 2019.05.24 |
[C++ 문법] '소멸자 가상화' (0) | 2019.05.24 |
[C++ 문법] '가상 함수(virtual function)' (0) | 2019.05.23 |
[C++ 문법] '연산자 함수(연산자 오버로딩)' (0) | 2019.05.23 |
댓글
이 글 공유하기
다른 글
-
[C++ STL] '시퀀스 컨테이너 - vector'
[C++ STL] '시퀀스 컨테이너 - vector'
2019.05.25 -
[C++ 문법] 'friend' 예약어
[C++ 문법] 'friend' 예약어
2019.05.24 -
[C++ 문법] '소멸자 가상화'
[C++ 문법] '소멸자 가상화'
2019.05.24 -
[C++ 문법] '가상 함수(virtual function)'
[C++ 문법] '가상 함수(virtual function)'
2019.05.23