티스토리 뷰

728x90

인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자.

인터페이스 상속과 구현 상속은 무엇을 의미하는가?
기본 클래스의 멤버 함수의 상속 방법을 두고 하는 말이다.

인터페이스 상속과 구현 상속의 차이점은 무엇인가?
인터페이스 상속이란, 순수 가상 함수의 상속을 말한다.

구현 상속이란, 가상 함수와 비가상 함수의 상속을 말한다.

각 함수들은?

순수 가상 함수 : 가상 함수이나, 함수의 정의 부분이 없고, 선언 부분만 있는 함수

가상 함수 : 파생 클래스에서 가상 함수를 받는 함수가 없다면, 기본 클래스 함수가 호출되고 있다면, 파생 클래스의 가상 함수를 호출시켜주는 매체가 되는 함수

비 가상 함수 : 일반 멤버 함수,

예제

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
43
44
45
46
47
48
 
class Shape
{
public:
    virtual void draw() const = 0;
    virtual void error(const std::string& msg);
public:    
    int objected() const;
};
 
class Rectangle : public shape{ …. };
class Ellipse  :  public Shape { ….. };
 
 
1. draw 함수는 암시적인 표시 장치에 현재의 객체를 그린다. (순수 가상함수)
2. error 함수는 다른 멤버 함수들이 호출하는 함수로, 이들이 에러를 보고할 필요가 있을 때 사용된다.(단순(비순수)가상함수)
3. objectID 함수는 주어진 객체에 붙는 유일한 정수 식별자는 반환한다.(비가상함수)
 
 
 
class Shape
{
public:
    virtual void draw( ) const = 0;
};
 
가상함수인 draw함수의 특징
1. 어떤 순수 가상 함수를 물려받은 구체 클래스가 해당 순수가상 함수를 다시 선언해야한다.
2. 순수 가상 함수는 전형적으로 추상 클래스 안에서 정의를 갖지 않는다.
*단순 가상함수를 선언하는 목적은 파생 클래스로 하여금 함수의 인터페이스뿐만 아니라 그 함수의 기본 구현도 물려받게 하자는 것입니다.
 
 
 
class Shape
{
public:
    int objected( ) const;
};
 
1  비가상 함수로 되어있다는 것은, 이 함수는 파생 클래스에서 다른 행동이 일어날 것으로 가정하지 않았다는 뜻이다.
2. 비가상 멤버 함수는 클래스 파생에 상관없이 변하지 않는 동작을 지정하는데 쓰인다.
3. 비가상 함수를 선언하는 목적은 파생 클래스가 함수 인터페이스와 더불어 그 함수의 필수적인 구현을 물려받게 하는 것이다.
 
 
 
 
 
 
cs

 

 

결론

각 함수들의 사용 법은?

순수 가상 함수 : 모든 파생 클래스마다 동일한 역할을 하는 고유의 동작을 필요로 하게 될 때

가상 함수 : 모든 파생 클래스마다 동일한 역할을 하는 일반적인 동작을 필요로하게 될 때

비가상 함수 : 모든 파생 클래스마다 동일한 역활을 하는 절대적인 동작을 필수로 하게 될 때

이것만은 잊지 말자!

1. 인터페이스 상속은 구현 상속과 다릅니다. Public 상속에서, 파생 클래스는 항상 기본 클래스의 인터페이스를 모두 물려받습니다.

2. 순수 가상 함수는 인터페이스 상속만을 허용합니다.

3. 단순(비순수) 가상 함수는 인터페이스 상속과 더불어 기본 구현의 상속도 가능하도록 지정합니다.

4. 비가상 함수는 인터페이스 상속과 더불어 필수 구현의 상속도 가하도록 지정합니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함
250x250