26
Chapter 07. 상상상 상상 C++ 상상상상상

Chapter 07. 상속의 이해

Embed Size (px)

DESCRIPTION

C++ 프로그래밍. Chapter 07. 상속의 이해. C++ 프로그래밍. Chapter 07-1. 상속에 들어가기에 앞서. 문제의 제시. 프로그램에 추가할 직급의 형태. 확장 이후의 급여지급 방식. 이 문제는 영업직과 임시직에 해당하는 클래스의 추가로 끝나지 않는다 . 컨트롤 클래스인 EmployeeHandlder 클래스의 대대적인 변경으로 이어진다 . 좋은 코드는 요구사항의 변경 및 기능의 추가에 따른 변경이 최소화되어야 한다 . 이를 위한 해결책으로 상속이 사용된다. C++ 프로그래밍. - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter 07.  상속의 이해

Chapter 07. 상속의 이해

C++ 프로그래밍

Page 2: Chapter 07.  상속의 이해

Chapter 07-1. 상속에 들어가기에 앞서

C++ 프로그래밍

Page 3: Chapter 07.  상속의 이해

3

Page 4: Chapter 07.  상속의 이해

4

문제의 제시프로그램에 추가할 직급의 형태

확장 이후의 급여지급 방식

이 문제는 영업직과 임시직에 해당하는 클래스의 추가로 끝나지 않는다 .

컨트롤 클래스인 EmployeeHandlder 클래스의 대대적인 변경으로 이어진다 .

좋은 코드는 요구사항의 변경 및 기능의 추가에 따른 변경이 최소화되어야 한다 .

이를 위한 해결책으로 상속이 사용된다 .

Page 5: Chapter 07.  상속의 이해

Chapter 07-2. 상속의 문법적인 이해

C++ 프로그래밍

Page 6: Chapter 07.  상속의 이해

6

상속Person 클래스를 public 상속함

Person 클래스의 멤버

용어정리

Page 7: Chapter 07.  상속의 이해

7

서브클래스의 생성자 정의

• 서브클래스 객체를 생성할 때 슈퍼클래스로부터 상속한 멤버변수와 서브클래스에 새로이 선언된 멤버변수를 모두 초기화한다 .

• 슈퍼클래스로부터 상속한 멤버변수는 슈퍼클래스의 생성자를 호출 ( 이니셜라이저를 통해서 ) 함으로써 초기화한다 .

Page 8: Chapter 07.  상속의 이해

8

유도 클래스의 객체생성 과정

실행결과

Page 9: Chapter 07.  상속의 이해

9

유도 클래스의 객체생성 과정 case1

SoDerived dr3(23, 24);순서 1. 메모리 공간의 할당

순서 2. 유도 클래스의 생성자 호출

순서 3. 기초 클래스의 생성자 호출 및 실행

순서 4. 유도 클래스의 생성자 실행

Page 10: Chapter 07.  상속의 이해

10

유도 클래스의 객체생성 과정 case2

순서 1. 메모리 공간의 할당SoDerived dr1

순서 2. 유도 클래스의 void 생성자 호출

순서 3. 이니셜라이저를 통한 기초 클래스 생성자 호출을 하지 않고 있으므로 기초클래스의 void 생성자 호출이 자동으로 이루어짐

순서 4. 유도 클래스의 실행

Page 11: Chapter 07.  상속의 이해

11

유도 클래스 객체의 소멸과정

실행결과

유도 클래스의 소멸자가 실행된 이후에 기초 클래스의 소멸자가 실행된다 .

스택에 생성된 객체의 소멸순서는 생성순서와 반대이다 .

Page 12: Chapter 07.  상속의 이해

12

기초클래스와 유도클래스의 소멸자

기초 클래스의 멤버 대상의 동적 할당은 기초 클래스의 생성자를 통해서 , 소멸 역시 기초 클래스의 소멸자를 통해서

Page 13: Chapter 07.  상속의 이해

Chapter 07-3. protected 선언과 세 가지 형태의 상속

C++ 프로그래밍

Page 14: Chapter 07.  상속의 이해

14

protected 로 선언된 멤버가 허용하는 접근의 범위

private 멤버에는 그 멤버가 선언된 클래스 내에서만 접근 가능상속한 슈퍼클래스의 private 멤버에 서브클래스에서 접근 불가능

protected 멤버에는 서브클래스에서 접근 가능 ( 그 멤버가 선언된 클래스와 서브클래스 외에는 접근 불가 )

Page 15: Chapter 07.  상속의 이해

15

세 가지 형태의 상속public 상속접근 제어 권한을 그대로 상속한다 !

protected 상속protected 보다 접근의 범위가 넓은 멤버는 protected 로 상속한다 .

private 상속private 보다 접근의 범위가 넓은 멤버는 private 으로 상속한다 .

Page 16: Chapter 07.  상속의 이해

16

protected 상속과 private 상속

protected상속의 결과

private 상속의 결과

Page 17: Chapter 07.  상속의 이해

Chapter 07-4. 상속을 위한 조건

C++ 프로그래밍

Page 18: Chapter 07.  상속의 이해

18

상속의 기본 조건인 IS-A 관계의 성립

무선 전화기는 전화기의 기본 기능에 새로운 특성이 추가된 것이다 .

노트북 컴퓨터는 컴퓨터의 기본 기능에 새로운 특성이 추가된 것이다 .

이렇듯 is-a 관계가 성립하는 두 클래스는 상속 관계에 있음

Page 19: Chapter 07.  상속의 이해

19

IS-A 기반의 예

Page 20: Chapter 07.  상속의 이해

20

HAS-A 관계IS-A 관계에 비해두 클래스간 연관성이 낮으며각 클래스의 변경 및 확장이 비교적 독립적이다 .

Page 21: Chapter 07.  상속의 이해

21

확인문제 C7-1 아래와 같은 클래스들의 상속관계를 생각하여 각 클래스들을 적절히 구현하고 , main 에서

MaleStudent 인스턴스를 생성한 후 이 객체가 갖는 속성들을 알아내어 화면에 출력하도록 하시오 . 각 클래스에는 한 개씩의 생성자를 두되 아래 클래스의 각 생성자들이 차례로 1 개 , 2개 , 3 개의 파라미터를 갖도록 하시오 . ( 교과서 문제 07-1 을 참고하시오 .)

Person int age int getAge()

Student int id int getId()

MaleStudent bool militaryServiceDone bool hasMilitaryServiceDone()

Page 22: Chapter 07.  상속의 이해

22

확인문제 C7-2 앞 문제 C7-1 에서 MaleStudent 클래스에 showInfo() 메소드를 추가하고

main 함수에서 이를 이용해 정보를 출력하도록 하시오 .

Person int age int getAge()

Student int id int getId()

MaleStudent bool militaryServiceDone bool hasMilitaryServiceDone() void showInfo()

Page 23: Chapter 07.  상속의 이해

23

실습문제 P7-1 확인문제 C7-2 프로그램을 아래와 같이 수정하시오 . 각 클래스에 파라미터를 갖는 않는 생성자를 추가하시오 . 이 생성자는 자신이 실행되었다는 사실을

화면에 출력하는 것 외에는 아무 일도 하지 않습니다 . main 함수에서 아무런 인자도 주지 않으면서 MaleStudent 인스턴스를 하나 생성하고 정보를

출력하게 해 보시오 . 이 때 어떤 생성자들이 실행되는지 관찰하시오 . Person

int age int getAge()

Student int id int getId()

MaleStudent bool militaryServiceDone bool hasMilitaryServiceDone() void showInfo()

Page 24: Chapter 07.  상속의 이해

24

실습문제 P7-2 교과서 312 쪽 문제 1 에 ColoredSquare 클래스를 추가하되 Square 클래스의 서브클래스가 되도록 하시오 . ColoredSquare 클래스는 멤버변수 color 와 멤버함수

showColor, showInfo 를 갖도록 하시오 . [ 클래스 이름 ]

ColoredSquare [ 멤버 변수 ]

private: int color; 색상을 나타내는 변수 [ 멤버 함수 ]

public: void showColor(); 색상을 출력하는 함수 public: void showInfo(); 색상과 면적을 출력하는 함수

[ 실행 예 ] ColoredSquare csquare(4,3,255); csquare.showColor(); 255 출력 csquare.showInfo(); 12, 255 출력

멤버 변수 color 의 범위를 0x00000000 ~ 0x00ffffff 까지로 한정 할 것 ( 각 바이트는 0~255사이의 RGB 값을 의미함 )color 의 범위를 벗어난 값으로는 생성되지 못하도록 할 것 (color 범위를 벗어난 경우 그 사실을 사용자에게 알리면 됨 )

Page 25: Chapter 07.  상속의 이해

25

실습문제 P7-3 교과서 312 쪽 문제 2 에서 EBook 의 서브클래스로 CopiableEBook

클래스를 작성하시오 . 이 클래스는 int 타입의 maxCopies 를 멤버변수로 갖도록 하시오 . Book 과 EBook, CopiableEBook 각각의 생성자와 소멸자에 적절한 출력문장을 삽입하고 main 함수를 적절히 수정하시오 . 프로그램 실행결과를 잘 살펴보고 프로그램의 어디에서 어떤 출력이 왜 나오게 되었는지 생각해 보시오 .

Page 26: Chapter 07.  상속의 이해

Chapter 07 이 끝났습니다 . 질문

있으신지요 ?