티스토리 뷰

공부/C++

C++ 복습) 상속

굥굔 2021. 11. 24. 18:01

C와 C++의 가장 큰 차이는 C는 절차 지향 언어이고 C++은 객체 지향 언어라는 점이다.

C에서 C++으로 넘어오면서 절차 지향에서 (구조체) -> 객체 지향 (클래스)가 되었다는 점이다.

 

이렇게 객체지향 언어가 되면서 가장큰 4가지 특징이 생겼다.

1. 캡슐화 (은닉성)

2. 상속

3. 다형성

4. 추상화

 

이다.

자주 보이는 접근제한 지정자 3개 - public(완전 공개), private(숨기기), protected(상속) 세 가지도 생겼다. 

은닉화는 접근제한 지정자로 간단하게 표현 가능하다.

두번째인 상속은 무엇일까.

말 그대로 상속 받는 것이다. 기능을 받아오겠다는 뜻인데 이를 이용하면 똑같은 부분을 굳~~이 구현하지 않아도 된다.

 

child가 parent를 상속받았다고 가정해보자.

class child : public parent

{~}

 

 그렇다면 child에서 parent의 private로 접근이 가능할까? 상속 받았으니 말이다. 답은 불가능이다.

public parent를 상속받은 자식에서 부모에게 접근하려면 public으로 설정해야 하는데 그러면 외부에서도 접근이 가능해져버린다. 부모라도 자식에게 숨기고 싶은게 있는법이니까.. !

 

이럴때 사용하는게 protected이다!!!

 

역시나 말로만 설명하면 어려워서 코드로 살펴본다면,

기본 상태

CChild가 CParent 를 상속받은 가장 기본적인 형태이다.

부모 안에는 각 접근제한 지정자로 지정되어 있는 int 값들이 존재한다.

main 함수에서 클래스 접근

당연하게도 main 함수 안에서 부모 객체일 때, 부모 클래스의 맴버에 접근을 하려고 하면 public 인 b에만 접근이 가능하다고 나온다.

 

자식 객체일 때의 멤버 접근

또한 자식 객체에서 상속받은 부모의 맴버에 접근하려고 할 때에도 public인 b에만 접근이 가능하다. 아래는 우리가 보는 값이 올바른 값인지 출력을 통해 보여준 값이다.

출력

 

이렇게 class 외부에서는 public 으로만 접근이 가능한 것을 확인할 수 있다.

그러면 부모를 상속받은 자식 내부에서도 부모의 protected에 접근이 가능한지 확인을 해보자.

위의 그림을 보면 부모를 상속받은 자식 클래스에서 CParent 에 속해있는 맴버를 확인 했을 때

private 인 a 는 잠겨 있고 (불가능 하고)

public 인 b 는 가능하고

protected 인 c 는 별표시인 것을 확인할 수 있다.

위에서 public으로 접근이 가능한 것을 확인 했으니 상속을 받은 자식 클래스 내부에서 protected의 멤버로 접근이 가능한지 확인을 하면,,,

위의 사진과 같이 오류가 없고 정상적으로 사용할 수 있는 것을 볼 수 있다.

 

 

 

이렇게 상속에 대해 짧게 알아보았다.

상속을 이용하면 코드의 재사용성을 높일 수 있다. 가장 자주 호출되는 기능을 최상위 부모클래스에 두고 밑으로 내려오면서 부모를 상속받는다면 복잡해 지지 않고 풍부한 기능을 구현 가능할 것 같았다. (대신 머리 터지겠지..)

 

또한 public 상속인지 protected 상속인지에 관해 정리해 놓은 글도 많은데 이번 포스팅에서는 여기까지만 글을 적는다. 사실 크기가 public > protected > private 라는건 다들 느낌적인느낌느낌으로 알고있을테니 말이다.

 

                                                                                                                                           

이 포스팅은 유투브 어소트락 게임 아카데미의 강의를 듣고 난 뒤 개인적으로 정리한 글 입니다.

https://www.youtube.com/c/AssortRockGameAcademy

 

어소트락 게임아카데미

DirectX11/12 자체엔진 게임제작, 언리얼 엔진 4 진정한 게임프로그래머가 되고 싶다면 어소트락 게임아카데미 24시간 자습실, 24시간 1:1 코칭 시스템 ASSORTROCK.COM

www.youtube.com

↑어소트락 게임 아카데미 유투브 링크.

'공부 > C++' 카테고리의 다른 글

[C++] 메모리 풀 1  (0) 2023.03.30
동적 라이브러리  (0) 2022.03.27
C++ 복습) const와 레퍼런스(&)  (0) 2021.11.23
C++ 복습) 포인터  (0) 2021.11.23
C++ 복습) 변수  (0) 2021.11.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함