윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성.

Slides:



Advertisements
Similar presentations
북한기도제목 4 월 3 주 (4/15-4/21). 1. 북한정치 - 통일부와 국방부는 11 일 잇따라 열린 정례 브리핑에서 지난 7 일 북한 해외 식당 종업원 들이 집단 탈북한 데 이어 북한 정찰총국 출 신 북한군 대좌와 북한 외교관이 지난해 잇 따라 한국으로 망명한.
Advertisements

비즈쿨 - 정 성 욱 - - 금오공고 비즈쿨 - 정 성 욱 1. 나는 각 단원들의 활동들에 성실하게 참여 하겠습니다. 우리의 다짐 2. 나는 나와 전체의 발전을 위해 각 멘토들의 지도에 순종하겠습니다. 3. 나는 각 단원들을 숙지함으로써 비즈니스 마인드를 함양하고 자신의.
노인복지론 담당교수 : 최 병태 교수님 학과 : 보건복지경영학과 학번 : 이름 : 김 태인 날짜 :
Kim Yeon Hee 8장. 상속과 다형성 Kim Yeon Hee.
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
명품 C++ 8장 상속.
미국경제의 신용위기가 한국경제에 미치는 영향
①신생아기의 신체발달 ②신생아기의 운동발달 ③신생아기의 감각기관의 발달 ☞차례. ①신생아기의 신체발달 ②신생아기의 운동발달 ③신생아기의 감각기관의 발달 ☞차례.
C++ Espresso 제1장 기초 사항.
사회복지법인 실무자 교육.
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
8. 객체와 클래스 (기본).
C++ Espresso 제9장 다형성.
10장 객체-지향 프로그래밍 II ©창병모.
Power Java 제10장 배열.
명품 C++ 8장 상속.
자바 5.0 프로그래밍.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
상속이란? - 기반클래스로부터 다른 클래스를 파생하는 법 protected란? 가상함수 (virtual function)
MFC Application Frameworks (AFX)
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
7장 클래스.
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
C ++ 프로그래밍 시작.
C++ Programming: chapter 7 – inheritence
This, static, final 지정 예약어 자바 4대 중첩 클래스
김 정 석 Web Programming 김 정 석
UML exercise in Class.
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
프로그래밍2 및 실습 C언어 기반의 C++ 2.
스택(Stack) 김진수
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Chapter 3 클래스. 최호성.
마을살이 제천덕산면을 중심으로 농촌공동체연구소장 한석주.
가상함수와 추상 클래스.
칼빈의 생애와 개혁자로의 변모 사학과 김종식.
국제의료관광 관련 법, 제도.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
Java Chapter 4 ~ 주차.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
자바 5.0 프로그래밍.
3장. 클래스의 기본.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
Chapter 02. 소프트웨어와 자료구조.
A Basic of C++.
남아메리카 선교 김수정, 이하정 전희진, 장성경.
3장,4장 발표 서정우.
자바 5.0 프로그래밍.
CHAPTER 9-1 한국의 사회복지정책 - 사회보험제도 -
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2015년 2학년 1반.
제 14 장 응용 계층과 클라이언트-서버 모델 클라이언트-서버 모델 14.2 동시성 14.3 프로세스 14.4 요약.
Java 5장. 객체지향 개념 public class SumTest {
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
Chapter 14. 템플릿(Template) 2
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
C++ 언어의 특징
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 17. 포인터의 포인터.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
프로그래밍 기법 최적화 프로그래밍.
Chapter 1 인간행동의 이해와 사회복지실천
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
경찰학 세미나 제 5 강 경찰관직무집행법 2조 5호의 의미 신라대학교 법경찰학부 김순석.
Presentation transcript:

윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성

윤성우의 열혈 C++ 프로그래밍 Chapter 08-1. 객체 포인터의 참조관계 윤성우 저 열혈강의 C++ 프로그래밍 개정판

객체의 주소 값을 저장하는 객체 포인터 변수 윤성우의 열혈 C++ 프로그래밍 Person * ptr=new Student(); “ C++에서, AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다(객체의 주소 값을 저장할 수 있다).” Person * ptr=new Student(); Person * ptr=new PartTimeStudent(); Student * ptr=new PartTimeStudent();

유도 클래스의 객체도 가리키는 포인터! 윤성우의 열혈 C++ 프로그래밍 IS-A 관계 유도 클래스 객체를 기초 클래스 객체로 바라볼 수 있는 근거

오렌지미디어 급여관리 확장성 문제 1차 해결 윤성우의 열혈 C++ 프로그래밍 모든 클래스의 객체를 Employee 클래스의 객체로 간주(처리)할 수 있는 기반을 마련. 컨트롤 클래스 입장에서는 모든 객체를 Employee 객체로 간주해도 문제가 되지 않는다!

EmployeeHandler의 첫 번째 수정 윤성우의 열혈 C++ 프로그래밍 class EmployeeHandler { private: Employee* empList[50]; int empNum; public: EmployeeHandler() : empNum(0) { } void AddEmployee(Employee* emp) empList[empNum++]=emp; } void ShowAllSalaryInfo() const /* for(int i=0; i<empNum; i++) empList[i]->ShowSalaryInfo(); */ void ShowTotalSalary() const int sum=0; /* for(int i=0; i<empNum; i++) sum+=empList[i]->GetPay(); */ cout<<"salary sum: "<<sum<<endl; ~EmployeeHandler() for(int i=0; i<empNum; i++) delete empList[i]; }; 왼쪽의 EmployeeHandler 클래스는 Employee 객체를 처리하는 컨트롤 클래스로 변경되었다.

임시직: TemporaryWorker 윤성우의 열혈 C++ 프로그래밍

영업직: SalesWorker 윤성우의 열혈 C++ 프로그래밍 PermanentWorker 클래스의 GetPay 함수를 오버라이딩! PermanentWorker 클래스의 ShowSalaryInfo 함수 오버라이딩!

Chapter 08-2. 가상함수(Virtual Function) 윤성우의 열혈 C++ 프로그래밍 Chapter 08-2. 가상함수(Virtual Function) 윤성우 저 열혈강의 C++ 프로그래밍 개정판

기초 클래스의 포인터로 객체를 참조하면, 윤성우의 열혈 C++ 프로그래밍

앞서 한 이야기의 복습 윤성우의 열혈 C++ 프로그래밍 예제 EmployeeManager2.cpp와 EmployeeManager3.cpp의 주석처리 부분에서 컴파일 에러가 발생하는 이유는?

함수의 오버라이딩과 포인터 형 윤성우의 열혈 C++ 프로그래밍 실행결과 함수를 호출할 때 사용이 된 포인터의 형에 따라서 호출되는 함수가 결정된다! 포인터의 형에 정의된 함수가 호출된다.

가상함수(Virtual Function) 윤성우의 열혈 C++ 프로그래밍 오버라이딩 된 함수가 virtual이면 오버라이딩 한 함수도 자동 virtual 포인터의 형에 상관 없이 포인터가 가리키는 객체의 마지막 오버라이딩 함수를 호출한다. 실행결과 현 상황에서의 EmployeeManager 클래스는 모든 객체를 Employee 객체로 간주한다. 따라서 호출하는 함수도 Employee 객체의 멤버함수이다! 바로 이러한 문제의 해결책이 위의 예제에 있다!

급여관리 확장성 문제의 해결과 상속의 이유 윤성우의 열혈 C++ 프로그래밍 GetPay 함수와 ShowSalaryInfo 함수를 Virtual로 선언하였으므로, EmpolyeeHandler가 호출하는 함수는 Employee 클래스의 멤버함수일지라도 실제 호출되는 함수는 각 포인터가 가리키는 객체의 마지막 오버라이딩 함수이다! 이렇듯 상속은 연관된 일련의 클래스들에 대해 공통의 규약을 적용할 수 있게 해 준다!

순수 가상함수와 추상 클래스 윤성우의 열혈 C++ 프로그래밍 몸체가 정의되지 않은 함수를 가리켜 순수 가상함수라 하며, 하나 이상의 순수 가상함수를 멤버로 두어서 객체생성이 불가능한 클래스를 가리켜 추상 클래스라 한다. 오버라이딩의 관계를 목적으로 정의된 함수들! 따라서 몸체부분의 정의는 의미가 없다! 순수 가상함수로 대체 가능!

다형성(Polymorphism) 윤성우의 열혈 C++ 프로그래밍 지금까지 공부한 가상함수와 관련된 내용을 가리켜 ‘다형성’이라 한다! 다형성은 동질이상의 의미를 갖는다. 모습은 같은데 형태는 다르다. 문장은 같은데 결과는 다르다! ptr->Simplefunc 함수의 호출이 다형성의 예!

Chapter 08-3. 가상 소멸자와 참조자의 참조 가능성 윤성우의 열혈 C++ 프로그래밍 Chapter 08-3. 가상 소멸자와 참조자의 참조 가능성 윤성우 저 열혈강의 C++ 프로그래밍 개정판

가상 소멸자(Virtual Destructor) 윤성우의 열혈 C++ 프로그래밍 소멸자를 가상으로 선언함으로써 각각의 생성자 내에서 할당한 메모리 공간을 효율적으로 해제할 수 있다.

참조자의 참조 가능성 윤성우의 열혈 C++ 프로그래밍 실행결과

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