PowerPoint Template

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

Microsoft PowerPoint - Chapter 6.ppt

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

C++ Programming

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

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

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

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

PowerPoint Template

설계란 무엇인가?

C++ Programming

쉽게 풀어쓴 C 프로그래밍

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

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

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

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

Microsoft PowerPoint - Chapter 4-rev

쉽게 풀어쓴 C 프로그래밍

C++ Programming

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

Slide 1

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

C++ Programming

PowerPoint Presentation

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

Microsoft PowerPoint - Chapter 10.ppt

Microsoft PowerPoint - 6주차.pptx

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

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

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

슬라이드 1

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

<4D F736F F F696E74202D2037C1D65FB0ADC0C7B3EBC6AE2837C0E55FBBF3BCD329>

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

Microsoft PowerPoint - Chapter 1-rev

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

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

PowerPoint Template

PowerPoint Template

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

Microsoft PowerPoint - [2009] 02.pptx

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

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

JAVA PROGRAMMING 실습 08.다형성

chap10.PDF

Blog

Slide 1

C++ 기본문법 정리

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

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

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

Microsoft PowerPoint - Chap12-OOP.ppt

PowerPoint Presentation

Microsoft PowerPoint - 2강

01-OOPConcepts(2).PDF

Microsoft PowerPoint - CSharp-10-예외처리

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 05. 객체의 활용

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

Microsoft PowerPoint 장강의노트.ppt

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 07. 상속

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

080629_CFP °ø°³¿ë.hwp

쉽게 풀어쓴 C 프로그래밍

Programming hwp

쉽게 풀어쓴 C 프로그래밍

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

Chapter 6 Objects and Classes

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

슬라이드 1

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

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Slide 1

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

PowerPoint Template

예제 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

기초컴퓨터프로그래밍

Microsoft PowerPoint - java2 [호환 모드]

No Slide Title

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

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

No Slide Title

유니티 변수-함수.key

Microsoft PowerPoint - chap11

<4D F736F F F696E74202D2038C0E55FB0ADC0C7B3EBC6AE28B0A1BBF3C7D4BCF6BFCD20B4D9C7FCBCBA29>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

C프로-3장c03逞풚

Microsoft PowerPoint - 5주_강의노트

PowerPoint Presentation

Slide 1

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

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) 이를상속받아새로만들어지는클래스를파생클래스 (derived class) 라함 4

공용부분상속 class 파생클래스명 : public[private] 베이스클래스명 ; public 베이스클래스 파생클래스 전용부분 공용부분 상속 전용부분 공용부분 private 전용부분 베이스클래스 상속 파생클래스 전용부분 공용부분 공용부분 5

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

public 상속예 1 7 #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(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 #include <iostream> using std::endl; using std::cout; class Point // 베이스클래스 Point int px,py; void setpt(int x, int y) px = x; py = y; int getx() return px; int gety() return py; ; class Circle : public Point // Point 의파생클래스 Circle float r; void setrd(float d) r = d; float area() return 3.14*r*r; ; int main() Circle c; c.setpt(10,20); // 베이스클래스의멤버호출 c.setrd(12.5); // 베이스클래스의멤버호출 cout << "Center of Circle : x = " << c.getx(); cout << ", y = " << c.gety() << endl; cout << "Area of circle : " << c.area() << endl; return 0; Center of Circle : x = 10, y = 20 Area of circle : 490.625 베이스클래스 Point 의공용멤버 setpt(), getx(), gety() 함수를 Point 의파생클래스인 Circle 이공용멤버로상속받아서객체 c 가호출한예이다. 8

private 상속예 #include <iostream> using std::endl; using std::cout; int main() Circle c; 9 class Point // 베이스클래스 Point int px,py; void setpt(int x, int y) px = x; py = y; int getx() return px; int gety() return py; ; class Circle : private Point // Point 의파생클래스 Circle float r; void setrd(float d) r = d; float area() return 3.14*r*r; void center(int x, int y) setpt(x,y); // 베이스클래스의멤버 setpt() 호출 ; void showxy() cout << "Center of Circle : x = " << getx(); cout << ", y = " << gety() << '\n'; // 베이스클래스의멤버 getx(),gety() 호출 c.center(10,20); c.setrd(12.5); c.showxy(); cout << "Area of circle : " << c.area() << '\n'; return 0; Center of Circle : x = 10, y = 20 Area of circle : 490.625 베이스클래스 Point 의공용멤버 setpt(), getx(), gety() 함수를 Point 의파생클래스인 Circle 이전용멤버로상속받았기때문에클래스의외부에서는이함수들에접근할수없으므로클래스의멤버함수인 center(),showxy() 함수를통하여이함수들을상속받아호출한예이다. 클래스외부의주프로그램에서 c.setpt() 와같이호출하면 setpt() 는객체 c 의전용멤버이므로에러가발생한다.

상속의생성자, 소멸자 Jong Hyuk Park

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

상속의생성자예 1 12 #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!

상속의생성자예 2 #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; // 컴파일에러 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; 13

14 상속의생성자예 3 #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) : Person(_age, _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; ;

15 #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; ; 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으로상속받으면파생클래스에서전용부분멤버가됨 17

protected 멤버상속 (2) class 클래스명 [private:] protected: // 전용부분멤버정의 // 클래스외부접근및상속안됨 // 보호부분멤버정의 // 클래스외부접근안됨, 상속됨 // 공용부분멤버정의 // 클래스외부접근및상속됨 ; Base 클래스 상속형태 public 상속 protected 상속 private 상속 public 멤버 public protected private Protected 멤머 protected protected private Private 멤버접근불가접근불가접근불가 18

세가지형태의상속 class Base private: int a; protected: int b; int c; ; int main(void) Derived object; return 0; ; class Derived : public Base // public 상속 // EMPTY ; 19

protected 멤버상속예 1 class AAA private: int a; protected: int b; ; class BBB: public AAA void SetData() a=10; // private 멤버, 따라서에러 b=10; // protected 멤버, OK! ; int main(void) AAA aaa; aaa.a=10; // private 멤버, 따라서에러 aaa.b=20; // protected 멤버, 따라서에러!! BBB bbb; bbb.setdata(); return 0; 20

protected 멤버상속예 2 21 #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; ;

상속을하는이유 문제의도입 운송수단에관련된클래스정의 자동차 (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); // 열차의칸수설정 ; 22

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

과제 1. 연습문제 7-2: Person 클래스프로그램 2. 7-8 절의은행계좌관리과제프로그램에다음을추가하여라 고객의전화번호정보를추가하여라. 전화번호는다음과같이 private 으로선언하라. char *phone; ( 이름, 전화번호 ) 와계좌번호로잔액조회를하는 Inquire() 오버로딩함수를작성하여라. void Inquire(char *name, char *phone); void Inquire(int id); 24

Jong Hyuk Park