안녕하세요 넬다이입니다.
오늘은 상속에 대해서 설명을 드릴 텐데요 상속을 잘 사용하면 개발이 매우 편하고 은닉성이라던지 다향성을 이용한 다양한 개발이 되기 때문에 이해를 잘하시면 좋을듯싶습니다. 그러면 오늘 정리 시작하겠습니다
상속이란?
상속이란 여러분들이 잘 알고 있는 상속(부모님이나 어떤 사람에게 무언가를 물려받는다)이라는 뜻으로 많이 기억하시고 알고 계실 텐데요 상속이란 말 그대로 상속이라는 프로그램 문법을 통해서 물려받는다는 것으로 이해하시면 됩니다.
제가 여자 친구에게도 상속에 대해서 설명해줄 때는 부모님의 집이 있는데 부모님의 집을 내가 사용할 수 있다는 개념? 부모님 집에 있는 가구 및 주방도구를 사용하는 것 또한 부모의 것이지만 자식인 나도 사용을 할 수 있다고 설명을 하는데요. 그만큼 부모라는 문법에서 정의해놓은 것들을 조건의 따라서 자식들이 사용하는 것을 의미합니다.
자 간단하게 코드로 설명을 드리겠습니다.
class Parent
{
public :
void OutPut(){
cout << "나는 부모의 OutPut" << endl;
}
}
class A : public Parent
{
}
class B : public Parent
{
}
void main()
{
A a;
a.OutPut();
B b;
b.OutPut();
}
자 위에 코드에서처럼 분명 OutPut은 부모에게만 있는 함수인데요
클래스 A와 B는 아무것도 없지만 public Parent라는 문법을 통해서 상속을 받음으로써 부모의 OutPut 함수를 사용할 수 있는 것입니다.
이것은 함수도 해당하지만 변수도 해당하는데요 Parent에 변수를 설정하면은 특정 조건만 만족하면은 자식 클래스(A , B)에서 사용을 할 수 있다는 것입니다.
특정 조건으로는 부모는 기본적으로 private , proected , public로 구분을 할 수 있는데
class는 기본적으로 private이며 proected는 자식은 자신은 사용 가능하지만 다른 곳에서는 사용을 못하며
public는 누구나 사용할 수 있으며
private는 부모만 사용할 수 있는 형태입니다.
이렇듯 다른 클래스로 상속을 하는 클래스를 부모 클래스 혹은 기반 클래스라고 부르고 있으며
상속받는 클래스를 자식 클래스 혹은 파생 클래스라고 부르고 있습니다.
자 이제 부모와 자식이 있다고 했을 때 생성자와 소멸자가 있는데 클래스 설명을 드릴 때 클래스는 생성자와 소멸자가 있는데 부모에도 생성자 소멸자가 있고 자식 클래스에도 생성자 소멸자가 있는데 이들은 어떻게 호출이 되는 것일까 하는 생각이 드실 수 있는데요 이에 대해서 설명을 드리겠습니다.
부모 자식 관계에서 생성과 소멸 순서는 다음과 같습니다.
1. 부모 클래스 생성자가 호출
2. 자식 클래스 생성자가 호출
3. 자식 클래스 소멸자가 호출
4. 부모 클래스 소멸자가 호출
위와 같은 순서로 호출이 이루어지는데요 이는 다음 코드와 같습니다.
class Parent
{
public :
void OutPut(){
cout << "나는 부모의 OutPut" << endl;
}
public :
Parent(){
cout << "부모의 생성자" << endl;
}
~Parent(){
cout << "부모의 소멸자" << endl;
}
}
class A : public Parent
{
public :
A(){
cout << "A의 생성자" << endl;
}
~A(){
cout << "A의 소멸자" << endl;
}
}
void main()
{
A a;
}
위 코드를 실행하게 되면은
부모의 생성자
A의 생성자
A의 소멸자
부모의 소멸자
이 순서대로 나오게 됩니다.
생성자는 부모부터 소멸은 자식부터라고 생각하시면 됩니다.
또 한 부모 클래스의 포인터는 자식 객체의 주소를 담을 수 있는데 이 말은 무엇이냐 하면은
위에 코드에서
Parent* a = new A();
가 가능하다는 이야기입니다.
자 이렇게 오늘 정리가 끝이 나게 되었는데 뒤에서 한번 더 자세하게 설명을 드릴 생각입니다.
이 부분은 맛보기라고 생각하시고 한번 개념 정리해두시면 좋을 듯싶습니다.
[개발/C&C++] - (C/C++ 속성 정리) 28일 차 : 복사 생성자의 이해
[개발/C&C++] - (C/C++ 속성 정리) 27일 차 : 깊은 복사와 얕은 복사의 이해
[개발/C&C++] - (C/C++ 속성 정리) 26일 차 : Static이란? 및 특징
[개발/C&C++] - (C/C++ 속성 정리) 25일 차 : Const 한정자란?
'개발 > C&C++' 카테고리의 다른 글
(C/C++ 속성 정리) 28일 차 : 복사 생성자의 이해 (0) | 2021.01.22 |
---|---|
(C/C++ 속성 정리) 27일 차 : 깊은 복사와 얕은 복사의 이해 (0) | 2021.01.21 |
(C/C++ 속성 정리) 26일 차 : Static이란? 및 특징 (0) | 2020.07.22 |
(C/C++ 속성 정리) 25일 차 : Const 한정자란? (0) | 2020.07.21 |
(C/C++ 속성 정리) 24일 차 : 객체지향 프로그래밍이란? (0) | 2020.07.20 |
(C/C++ 속성 정리) 23일 차 : 분활컴파일 및 (0) | 2020.07.14 |
(C/C++ 속성 정리) 22일 차 : 함수포인터를 이용한 사칙연산 계산기 만들기 (0) | 2020.07.13 |
(C/C++ 속성 정리) 21일 차 : 함수포인터 (0) | 2020.07.12 |