티스토리 뷰

C언어 잡기술/C++

상속에 관해서

Teus 2022. 5. 19. 04:17
728x90
반응형

 

https://www.youtube.com/watch?v=nds94MTLABA 

널널한 개발자님의 C++ 강의를 듣고, 주인장의 생각을 정리하는 포스팅 입니다.

 

요약

1. 상속을 하면 몸뚱이는 커진다.

A <- B(B가 A를 상속받음) 이면

 

당연히 B에는 A의 정보까지 있으니깐

 

Object가 가지고 있는 정보의 크기는

 

B>A가 될다

 

2. B와 A를 포인팅 할 때

#include <iostream>

using namespace std;

class A{
public:
    A(){};
    ~A(){};
};

class B : public A{
public:
    B(){};
    ~B(){};
};

int main(){
    A test_A;
    B test_B;
    //아래의 경우, B범위 만큼 접근할 수 있는데
    //A는 B보다 작으므로, B-A(B는 있고, A는 없는) 위치에 접근하면 메모리 오류
    //때문에 컴파일 단계에서 막혀버림
    B* pointing_A = &test_A;

    //아래의 경우, A가 B보다 작으나, A의 접근범위는 B의 범위 내에있음
    //따라서 아무런 문제가 발생하지 않는다.
    A* pointing_B = &test_B;
}

 

3. 생성자의 실행 순서

함수의 콜은 Call Stack에서 보면 B의 생상자가 올라오고, A의 생성자가 올라옵니다.

 

하지만 B쌓임 -> A쌓임 -> A실행 -> B실행

 

순으로 진행되어 생성자가 실행되는 순서는 무조건 부모 class가 먼저 실행

 

4. 소멸자의 실행 순서

소멸자는 접근형식을 따라감

A* pointing_B = new B;
delete A;
/*
이 상태에서 A의 소멸자가 virtual이 아니면
A의 소멸자만 실행되고 끝난다.

문제는 B의 생성자에서 메모리 할당이 있었을 경우
B의 소멸자가 실행이 안되면서 B생성자에서 할당한 메모리는 줄줄줄
*/

 

위와같은 문제점이 발생합니다..

 

따라서 위 문제를 해결하기 위해서 A의 소멸자를 virtual로 선언해 줄 경우

 

B의 소멸자가 먼저 실행되고, A의 소멸자가 실행되는 순서로 프로그램이 마무리 됩니다.

 

5. Method

강의에서 깔끔하게 정리가 되어있습니다.

1. 일반 Method는 접근형식(Pointer 형식)을 따라감

2. Virtual Method는 실 형식(Pointer가 지목한 객체)의 형식을 따라감

3. static은 상속 자체가 안된다.(virtual 이면서 static인거는 불가능함)

728x90
반응형

'C언어 잡기술 > C++' 카테고리의 다른 글

Python과 C++의 클래스 생성자  (0) 2022.05.18
C++에는 있고, C언어에는 없는것  (0) 2022.05.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함