안선생의 개발 블로그
C++ 상속 본문
상속
부모클래스의 기능을 자식 클래스가 쓸 수 있다.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#include<iostream>
using namespace std;
class CParent //부모 클래스
{
protected: //자식은 접근 가능
int m_i;
public:
CParent() // 기본생성자
:m_i(0)
{}
CParent(int a) // 이 생성자가 실행됨
:m_i(a)
{}
~CParent()
{
cout << "부모 소멸자" << endl;
}
public:
void Setint(int a)
{
m_i = a;
}
void output()
{
cout << "Parent"<<endl;
}
};
class Child : public CParent //자식 클래스 class 이름 : 접급제한자 부모
{
private:
float f;
public:
Child()
: f(0.f)
, CParent(100) // 부모의 생성자를 고르고 싶으면 명시적으로 오버로딩된 함수에 맞춰준다.
{
// m_i = 1; // 부모의 멤버함수가 private 선언되서 접근이 안된다. protected쓰면 가능
}
~Child()
{
cout << "자식 소멸자" << endl;
}
public:
//상속받은 부모클래스의 함수를 재정의(오버라이딩) 함
void output()
{
cout << "Child" << endl;
}
};
int main()
{
//객체지향 언어 특징
//1. 캡슐화 (은닉성)
CParent cp;
Child ch; //실제 호출은 자식부터 시작됨
//cp.output(); // 부모의 함수가 출력
//ch.output(); // 상속받은 부모클래스의 함수를 재정의(오버라이딩)되서 자식 함수가 호출됨
//ch.CParent::output(); // 부모의 함수가 출력됨
//cp.Setint(10);
//ch.Setint(10); // 상속을 해서 부모의 기능을 쓸 수 있음
//상속
//자식 or 부모 클래스는 상속관계에서 다른 클래스의 멤버를 초기화 할 수 없다.
//생성자 호출 순서 자식 -> 부모
// 생성자 실행 순서, 초기화 순서 부모 -> 자식
// 소멸자 실행 및 호출 순서, 자식 -> 부모
// 오버 라이딩
// 부모 클래스의 멤버함수를 자식쪽에서 재정의 함으로써, 자식 클래스에 구현된 기능이 호출되도록 한다.
return 0;
}
|
cs |
'C++' 카테고리의 다른 글
C++ 다형성 (0) | 2022.09.22 |
---|---|
C++ 오버라이딩 (0) | 2022.09.22 |
C++ 이진 탐색 트리 구현 (0) | 2022.09.18 |
C++ Tree (0) | 2022.09.18 |
C++ list iterator (1) | 2022.09.13 |