티스토리 뷰
반응형
* 순수가상함수(추상 함수)
순수가상함수는 함수 헤더만 존재하고 함수의 몸체는 없는 함수이다. 순수가상함수를 하나라도 가지고 있는 추상클래스(abstract class)라고 한다. 추상 클래스로는 객체를 생성 할 수 없다.
추상 클래스는 추상적인 개념을 나타내거나 클래스와 클래스 사이의 인터페이스를 나타내는 용도로 사용된다. 추상 클래스는 멤버 함수의 원형만을 정의하는 것이고 그 구현은 자식 클래스에서 하게 된다. 추상 클래스를 상속받는 자식 클래스는 반드시 순수가상함수를 구현해야 한다.
순수가상함수는 형식 정의문에서 가상 함수 선언문 뒤에 =0 을 명시한다. 또 자식 클래스에서 부모 클래스의 순수가상 함수를 재정의(오버라이딩)하지 않으면 추상 클래스가 되어 객체를 생성할 수 없다. 따라서 객체를 생성 할 수 있는 클래스를 만들기 위해서는 상속 형식의 순수가상함수를 재정의 해야한다.
모든 멤버가 순수가상함수이면서 접근 지정이 public으로 상속 지정한 형식을 인터페이스라 할 수 있다. java나 c#에서는 인터페이스를 형식으로 제공하지만 c++에서는 제공하지 않는다.
* 순수가상함수 특징
1. virtual void 함수이름()=0; 으로 명시한다.
2. 자식들에게 강제적으로 오버라이딩을 명령한다. (강제성)
3. 자식 클래스가 오버라이딩을 하지 않을 경우 자식 클래스도 추상클래스화 되어서 객체를 생성 할 수 없다.
4. 동적 바인딩 할시 원활한 서비스를 제공한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 |
#include<iostream>
#include<string>
using namespace std;
class Area {//추상클래스//java에선 추상클래스 명시가 필수지만 c++은 명시 안해도 됨
public:
virtual void disp() {};
};
class Rect :public Area {//네모
public:
void disp() {cout<<"Rect"<<endl;}
};
class Cir :public Area {//동그라미
public:
void disp() {cout << "Cir" << endl;}
};
void main() {
Rect rect;//추상클래스를 객체로 만들려면 자식이 추상함수를 완수해야함.
Cir cir;
//rect.disp();//정적바인딩
//cir.disp();//정적바인딩
Area *area;//부모 포인터 생성
area = ▭//자식의 주소를 잡음
area->disp();
//부모 함수가 virtual가 있기 때문에 자식이 우선시되어 부모를 거치지 않고 자식에게 먼저 접근
area = ○//자식의 주소를 잡음
area->disp();
//부모 함수가 virtual가 있기 때문에 자식이 우선시되어 부모를 거치지 않고 자식에게 먼저 접근
//상속된것을 유지하면서
//자식들 기능을 더해 반드시 재정의 하게 만듬
}
|
cs |
반응형
'Programming > C++' 카테고리의 다른 글
[c++]프렌드(friend) (1) | 2018.03.14 |
---|---|
[c++]동적 바인딩을 이용한 Stack, Queue 구조 짜기 (0) | 2018.03.14 |
[c++]가상함수(virtual method) (1) | 2018.03.13 |
[c++]가상상속(virtual) (1) | 2018.03.13 |
[c++]상속 및 has~a관계를 이용한 급여관리프로그램 (0) | 2018.03.12 |
댓글
공지사항