1 / 26

Chapter 07. 상속의 이해

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

Download Presentation

Chapter 07. 상속의 이해

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ 프로그래밍 Chapter 07. 상속의 이해

  2. C++ 프로그래밍 Chapter 07-1. 상속에 들어가기에 앞서

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

  4. C++ 프로그래밍 Chapter 07-2. 상속의 문법적인 이해

  5. 상속 Person 클래스를 public 상속함 Person 클래스의 멤버 용어정리

  6. 서브클래스의 생성자 정의 • 서브클래스 객체를 생성할 때 슈퍼클래스로부터 상속한 멤버변수와 서브클래스에 새로이 선언된 멤버변수를 모두 초기화한다. • 슈퍼클래스로부터 상속한 멤버변수는 슈퍼클래스의 생성자를 호출(이니셜라이저를 통해서)함으로써 초기화한다.

  7. 유도 클래스의 객체생성 과정 실행결과

  8. 유도 클래스의 객체생성 과정 case1 순서 1. 메모리 공간의 할당 SoDerived dr3(23, 24); 순서 2. 유도 클래스의 생성자 호출 순서 3. 기초 클래스의 생성자 호출 및 실행 순서 4. 유도 클래스의 생성자 실행

  9. 유도 클래스의 객체생성 과정 case2 순서 1. 메모리 공간의 할당 SoDerived dr1 순서 2. 유도 클래스의 void 생성자 호출 순서 3. 이니셜라이저를 통한 기초 클래스 생성자 호출을 하지 않고 있으므로 기초클래스의 void 생성자 호출이 자동으로 이루어짐 순서 4. 유도 클래스의 실행

  10. 유도 클래스 객체의 소멸과정 실행결과 유도 클래스의 소멸자가 실행된 이후에 기초 클래스의 소멸자가 실행된다. 스택에 생성된 객체의 소멸순서는 생성순서와 반대이다.

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

  12. C++ 프로그래밍 Chapter 07-3. protected 선언과 세 가지 형태의 상속

  13. protected로 선언된 멤버가 허용하는 접근의 범위 private 멤버에는 그 멤버가 선언된 클래스 내에서만 접근 가능 상속한 슈퍼클래스의 private 멤버에 서브클래스에서 접근 불가능 protected 멤버에는 서브클래스에서 접근 가능 (그 멤버가 선언된 클래스와 서브클래스 외에는 접근 불가)

  14. 세 가지 형태의 상속 public 상속 접근 제어 권한을 그대로 상속한다! protected 상속 protected보다 접근의 범위가 넓은 멤버는 protected로 상속한다. private 상속 private보다 접근의 범위가 넓은 멤버는 private으로 상속한다.

  15. protected 상속과 private 상속 private 상속의 결과 protected 상속의 결과

  16. C++ 프로그래밍 Chapter 07-4. 상속을 위한 조건

  17. 상속의 기본 조건인 IS-A 관계의 성립 무선 전화기는 전화기의 기본 기능에 새로운 특성이 추가된 것이다. 노트북 컴퓨터는 컴퓨터의 기본 기능에 새로운 특성이 추가된 것이다. 이렇듯 is-a 관계가 성립하는 두 클래스는 상속 관계에 있음

  18. IS-A 기반의 예

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

  20. 확인문제 • C7-1 • 아래와 같은 클래스들의 상속관계를 생각하여 각 클래스들을 적절히 구현하고,main에서 MaleStudent 인스턴스를 생성한 후 이 객체가 갖는 속성들을 알아내어 화면에 출력하도록 하시오. 각 클래스에는 한 개씩의 생성자를 두되 아래 클래스의 각 생성자들이 차례로 1개, 2개, 3개의 파라미터를 갖도록 하시오. (교과서 문제 07-1을 참고하시오.) • Person • int age • int getAge() • Student • int id • int getId() • MaleStudent • bool militaryServiceDone • bool hasMilitaryServiceDone()

  21. 확인문제 • C7-2 • 앞 문제 C7-1에서 MaleStudent 클래스에 showInfo() 메소드를 추가하고 main 함수에서 이를 이용해 정보를 출력하도록 하시오. • Person • int age • int getAge() • Student • int id • int getId() • MaleStudent • bool militaryServiceDone • bool hasMilitaryServiceDone() • void showInfo()

  22. 실습문제 • P7-1 • 확인문제 C7-2 프로그램을 아래와 같이 수정하시오. • 각 클래스에 파라미터를 갖는 않는 생성자를 추가하시오. 이 생성자는 자신이 실행되었다는 사실을 화면에 출력하는 것 외에는 아무 일도 하지 않습니다. • main 함수에서 아무런 인자도 주지 않으면서 MaleStudent 인스턴스를 하나 생성하고 정보를 출력하게 해 보시오. 이 때 어떤 생성자들이 실행되는지 관찰하시오. • Person • int age • int getAge() • Student • int id • int getId() • MaleStudent • bool militaryServiceDone • bool hasMilitaryServiceDone() • void showInfo()

  23. 실습문제 • 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 범위를 벗어난 경우 그 사실을 사용자에게 알리면 됨)

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

  25. Chapter 07이끝났습니다. 질문 있으신지요?

More Related