[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
댓글을 사용할 수 없습니다.