Microsoft PowerPoint - additional07.ppt [호환 모드]

Similar documents
PowerPoint Template

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - Chapter 6.ppt

C++ Programming

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - additional08.ppt [호환 모드]

C++ Programming

PowerPoint Template

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

프입2-강의노트-const-friend-static

Microsoft PowerPoint - additional03.ppt [호환 모드]

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Slide 1

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - 6주차.pptx

Microsoft PowerPoint - Chapter 4-rev

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

<4D F736F F F696E74202D2037C1D65FB0ADC0C7B3EBC6AE2837C0E55FBBF3BCD329>

C++ Programming

Microsoft PowerPoint - C++ 5 .pptx

C++ Programming

슬라이드 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

PowerPoint Template

Microsoft PowerPoint - Chapter 10.ppt

gnu-lee-oop-kor-lec06-3-chap7

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

JAVA PROGRAMMING 실습 07. 상속

Blog

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional01.ppt [호환 모드]

Programming hwp

JAVA PROGRAMMING 실습 05. 객체의 활용

8. 클래스 D는클래스 A, 클래스 B, 클래스 C로부터상속받아맊들고싶다. 아래빈칸을채우시오. ( 대소문자주의하시오 ) class D { ; Student s; 11. 다음프로그램의실행결과는? 9. 다음프로그램의실행결과는? class A{ A(){cout << " 생성

Microsoft PowerPoint - Chap12-OOP.ppt

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

PowerPoint Presentation

Slide 1

쉽게 풀어쓴 C 프로그래밍

C++ 기본문법 정리

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - additional-11_13l.ppt [호환 모드]

chap10.PDF

슬라이드 1

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

080629_CFP °ø°³¿ë.hwp

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint Presentation

Microsoft PowerPoint - 9ÀÏ°_ÂüÁ¶ÀÚ.ppt

Microsoft PowerPoint - java2 [호환 모드]

Microsoft PowerPoint - chap11

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint Presentation

Chapter 6 Objects and Classes

JAVA PROGRAMMING 실습 02. 표준 입출력

No Slide Title

<4D F736F F F696E74202D2038C0E55FB0ADC0C7B3EBC6AE28B0A1BBF3C7D4BCF6BFCD20B4D9C7FCBCBA29>

제11장 프로세스와 쓰레드

Microsoft PowerPoint - Chapter 1-rev

PowerPoint Template

Design Issues

쉽게 풀어쓴 C 프로그래밍

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

Microsoft PowerPoint - 2강

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

01-OOPConcepts(2).PDF

PowerPoint 프레젠테이션

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Slide 1

Microsoft PowerPoint 장강의노트.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint Presentation

Slide 1

금오공대 컴퓨터공학전공 강의자료

Slide 1

adfasdfasfdasfasfadf

PowerPoint Presentation

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

슬라이드 1

유니티 변수-함수.key

Transcription:

보충자료 7. 상속 (inheritance) 의이해 상속의기본개념 상속의생성자, 소멸자 protected 멤버 Jong Hyuk Park

상속의기본개념 Jong Hyuk Park

상속의기본개념 상속의예 1 " 철수는아버지로부터좋은목소리와큰키를물려 받았다." 상속의예 2 "Student 클래스가 Person 클래스를상속한다." 아버지 Person 철수 Stduent 3

파생클래스 (derived class) 상속 (inheritance) 한클래스가다른클래스에서정의된속성 ( 자료, 함수 ) 를이어받아그대로사용 이미정의된클래스를바탕으로필요한기능을추가하여정의 소프트웨어재사용지원 파생클래스는 C++ 에서각클래스의속성을공유하고물려받는객체지향프로그래밍의상속 (inheritance) 을구현한것 이미만들어진기존의클래스를베이스클래스 (base class) 또는부모클래스 (parent class) or 슈퍼클래스 이를상속받아새로만들어지는클래스를파생클래스 (derived class) or 하위클래스라고도함. 4

공용부분상속 class 파생클래스명 : public[private] 베이스클래스명 ; public 베이스클래스 파생클래스 전용부분 전용부분 공용부분 상속 공용부분 private 베이스클래스 파생클래스 전용부분 상속 전용부분 공용부분 공용부분 객체생성순서 ---------------- 1. 메모리할당 2. 베이스클래스생성자실행 3.Derived 클래스생성자실행 5

베이스클래스와파생클래스예 class Person int age; char name[20]; int GetAge() const const char* GetName() const Person(int _age=1, char* _name= name="noname") noname ; Base class Derived class class Student: public Person char major[20]; // 전공 Student(char* _major) const char* GetMajor() const void ShowData() const ; 6

생성자, 소멸자 베이스클래스, 파생클래스가생성자, 소멸자를갖는경우에생성자는파생되는순서에따라호출되고소멸자는파생된순서의반대로호출 파생클래스의객체가생성될때먼저베이스클래스의생성자가호출되어실행된후파생클래스의생성자가호출되어실행 소멸자인경우에는실행순서가생성자와는반대로파생클래스의소멸자가실행된후베이스클래스의소멸자가실행 베이스클래스의생성자에인수를전달하고자하는경우파생클래스의생성자를정의할때베이스클래스에전달될인수를다음과같이기술 파생클래스 _ 생성자명 ( 인수리스트 ) : 베이스클래스 _ 생성자명 ( 인수리스트 ) ; 7

상속의생성자예 1 8 #include <iostream> using std::endl; using std::cout; class AAA //Base 클래스 AAA() cout<<"aaa() call!"<<endl; AAA(int i) cout<<"aaa(int i) call!"<<endl; ; class BBB : public AAA //Derived 클래스 BBB() cout<<"bbb() call!"<<endl; BBB(int j): AAA( j) cout<<"bbb(int j) call!"<<endl; ; int main(void) cout << " 객체 1 생성 "<<endl; BBB bbb1; cout << " 객체 2 생성 " << endl; BBB bbb2(10); return 0; 객체 1 생성 AAA() call! BBB() call! 객체 2 생성 AAA(int i) call! BBB(int j) call!

#include <iostream> using std::endl; using std::cout; class Person int age; char name[20]; ; public 상속예 1 int GetAge() const return age; const char* GetName() const return name; Person(int _age=1, char* _name="noname") age=_age; strcpy(name, _name); 문제점?? 9 실행후출력값확인 원하는형태로초기화안됨. class Student: public Person char major[20]; // 전공 Student(char* _major) strcpy(major, _major); const char* GetMajor() const return major; void ShowData() const cout<<" 이름 : "<<GetName()<<endl; cout<<" 나이 : "<<GetAge()<<endl; cout<<" 전공 : "<<GetMajor()<<endl; ; int main(void) Student Kim("computer"); Kim.ShowData(); ; return 0;

public 상속예 2 BasicInheri2.cpp student 생성자변경 Student 클래스의멤버age, name이 private이아닌경우가능 정보은닉에위배 10

BasicInheri2.cpp #include <iostream> using std::endl; using std::cout; class Person int age; char name[20]; ; int GetAge() const return age; const char* GetName() const return name; Person(int _age=1, char* _name="noname") age=_age; strcpy(name, _name); class Student: public Person char major[20]; // 전공 Student(int _age, char* _name, char* _major) age=_age; g // 컴파일에러 strcpy(name, _name); // 컴파일에러 strcpy(major, _major); const char* GetMajor() const return major; void ShowData() const cout<<" 이름 : "<<GetName()<<endl; cout<<" 나이 : "<<GetAge()<<endl; cout<<" 전공 : "<<GetMajor()<<endl; ; int main(void) Student Kim(20, "Hong Gil Dong", "computer"); Kim.ShowData(); ; return 0; 11

public 상속예 3 BasicInheri3.cpp 멤버이니셜라이저활용 Base 클래스의생성자명시적호출 12

BasicInheri3.cpp #include <iostream> using std::endl; using std::cout; class Person int age; char name[20]; 13 class Student: public Person char major[20]; // 전공 Student(int _age, char* _name, char* _major) : Person(_age, _name) strcpy(major, _major); const char* GetMajor() const return major; int GetAge() const return age; void ShowData() const cout<<" 이름 : "<<GetName()<<endl; const char* GetName() const cout<<" 나이 : "<<GetAge()<<endl; return name; cout<<" 전공 : "<<GetMajor()<<endl; ; Person(int _age=1, char* int main(void) _name= name="noname") noname age=_age; Student Kim(20, "Hong Gil Dong", strcpy(name, _name); "computer"); Kim.ShowData(); ; return 0; ;

상속의소멸자예 14 #include <iostream> using std::endl; using std::cout; class AAA //Base 클래스 AAA() cout<<"aaa() call!"<<endl; ~AAA() cout<< ~AAA(int i) call!"<<endl; ; class BBB : public AAA //Derived 클래스 BBB() cout<<"bbb() call!"<<endl; ~BBB() cout<<"~bbb() call!"<<endl; ; 객체소멸순서 1. Derived 클래스소멸자실행 2.base 클래스소멸자실행 3. 메모리반환 ( 해제 ) int main(void) BBB bbb; return 0; AAA() call! BBB() call! ~BBB() call! ~AAA() call!

protected 멤버 Jong Hyuk Park

protected 멤버상속 (1) 파생클래스의멤버함수는베이스클래스의공용멤버에직접접근이가능하지만베이스클래스의전용멤버에대해서는접근할수없음 파생클래스의멤버함수가베이스클래스의전용멤버를상속받아자유로이사용을위해서는다음두가지방식사용 프렌드함수를사용 베이스클래스정의시 protected 키워드를사용한보호부분을정의 보호부분에있는멤버는전용멤버와같이외부에서는직접접근할수없지만파생클래스의멤버함수에서는직접접근이가능 보호부분멤버가파생클래스에서 public 으로상속받으면파생클래스의 protected 멤버가됨 private으로상속받으면파생클래스에서전용부분멤버가됨 16

protected 멤버상속예 1 상속관계에놓여있는경우접근허용 그이외는 private 멤버와동일 class AAA private: int a; protected: int b; ; int main(void) AAA aaa; aaa.a=10; // private 멤버, 따라서에러!! aaa.b=20; // protected 멤버, 따라서에러!! BBB bbb; bbb.setdata(); 17 class BBB: public AAA void SetData() a=10; // private 멤버, 따라서에러 b=10; // protected 멤버, OK! ; return 0;

18 protected 멤버상속예 2 BasicInheri4.cpp #include <iostream> using std::endl; using std::cout; class Person protected: int age; char name[20]; ; int GetAge() const return age; const char* GetName() const return name; Person(int _age=1, char* _name="noname") age=_age; strcpy(name, _name); class Student: public Person char major[20]; // 전공 Student(int _age, char* _name, char* _major) age=_age; strcpy(name, _name); strcpy(major, _major); const char* GetMajor() const return major; void ShowData() const cout<<" 이름 : "<<GetName()<<endl; cout<<" 나이 : "<<GetAge()<<endl; cout<<" 전공 : "<<GetMajor()<<endl; ; int main(void) Student Kim(20, "Hong Gil Dong", "computer"); Kim.ShowData(); return 0; ;

세가지형태의상속 접근권한변경 - Base 클래스의멤버는상속되는과정에서접근권한변경 Base 클래스 상속형태 public 상속 protected 상속 private 상속 public 멤버 public protected private Protected 멤머 protected protected private Private 멤버접근불가접근불가접근불가 class 클래스명 [private:] protected: ; 19 // 전용부분멤버정의 // 클래스외부접근및상속안됨 // 보호부분멤버정의 // 클래스외부접근안됨, 상속됨 // 공용부분멤버정의 // 클래스외부접근및상속됨

세가지형태의상속 class Base private: int a; protected: int b; int c; ; int main(void) Derived object; return 0; ; 20 class Derived : public Base // public 상속 ; // EMPTY protected? private? ** 사용된상속보다넓은범위는그범위로맞춤.

상속을하는이유 문제의도입 운송수단에관련된클래스정의 자동차 (car), 열차 (train), 선박 (ship), 비행기 (Airplane) 등등 class Airpalne int passenger; // 탑승인원 int baggage; // 수하물의무게 int crew_man; // 승무원인원 Airpalne(int p=0, int w=0, int c=0); void Ride(int person); // 탑승하다. void Load(int weight) // 짐을싣다. void TakeCrew(int crew) // 승무원탑승 class Train int passenger; // 탑승인원 int baggage; // 수하물의무게 int length; // 열차의칸수 Train(int p=0, int w=0, int l=0); void Ride(int person); // 탑승하다. void Load(int weight); // 짐을싣다. void SetLength(int len); // 열차의칸수설정 ; 21

상속을하는이유 문제의해결 class Vehicle int passenger; int baggage; Vehicle(int person=0, int weight=0); void Ride(int person); // 탑승하다. void Load(int weight); // 짐을싣다. ; Airplane Train 22

Jong Hyuk Park