Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

Typing diary

상속, 가상함수, 순수가상함수 본문

C, C++

상속, 가상함수, 순수가상함수

Jcon 2022. 8. 17. 21:40
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
 
using namespace std;
 
//클래스는 서로간에 부모의 자식관계를 형성할 수 있다.
//자식 클래스는 부모클래스의 멤버들을 사용할 수 있다.
//보모클래스에서 public 이나 protect로 되어있는 멤버들은 사용 가능하지만
//private으로 되어있는 멤버는 자식에서도 사용이 불가능 하다.
 
class CParent
{
public:
    CParent() {}
 
    //부모 클래스의 소멸자를 가상함수로 하지 않을시 업캐스팅된 객체의 경우 
    //소멸될때 자식클래스의 소멸자를 실행하지 않기 때문에 반드시 부모클래스의 
    //소멸자는 가상함수로 만들어 주어야 한다.
    virtual ~CParent()
    {
        cout << "Parent 소멸자" << endl;
    }
    
    //가상함수
    virtual void Func()
    {
        cout << "Parent" << endl;
    }
 
    //순수 가상함수 
    //순수 가상함수는 구현부분이 존재하지 않으며 자식 클래스에서 반드시 
    //재정의 해줘야 한다.
    //순수 가상함수를 가지는 클래스를 추상클래스라고 하고 추상클래스는 객체 생성이 
    //불가능 하다.
    virtual void PureFunc() = 0
};
 
class CChild : public CParent
{
public:
    CChild(){}
    ~CChild(){
        cout << "Child 소멸자" << endl;
    }
 
    //가상함수 재정의
    void Func() 
    {
        cout << "Child" << endl;
    }
 
    //순수가상함수 재정의
    void PureFunc() 
    {
        cout << "순수가상함수 실행" << endl;
    }
};
 
int main()
{
    //CParent var;  -> CParent는 추상클래스이기 때문에 객체 생성이 불가능 하다.
    CParent* var = new CChild; //업캐스팅
    var->Func();
    var->PureFunc();
    delete var;
    return 0;
}
cs

'C, C++' 카테고리의 다른 글

함수 포인터  (0) 2022.08.17
파일입출력 fwrite,fread  (0) 2022.08.17
조정자(Manipulator)  (0) 2022.08.17
c++ 참조와 포인터의 차이  (0) 2022.08.17
String의 작동원리(c++)  (0) 2022.08.17