Super Base class class Sub Derived class class

Super = 부모 = 상위 = Base : 상속 해줄 class (일반적인 class) Sub = 자식 = 하위 = Derived : 상속 받을 class (구체적인 class) 7장. 상속(Inheritance)의 이해 yhkim 95@gmail. com Kim Yeon Hee





7 -2 기본 상속의개념 기본 개념 7 -2 상속의 class Person { Base class int age; char name[20]; public: int Get. Age() const { } const char* Get. Name() const { } Person(int _age=1, char* _name="noname") { } }; class Student: public Person Derived class { char major[20]; //전공 public: Student(char* _major){ } const char* Get. Major() const { } void Show. Data() const { } }; 그림 7 -1

7 -3 상속하는 클래스의 객체 생성 및 소멸과정 class AAA //Base 클래스 { public: AAA(){ } AAA(int i){ } }; class BBB : public AAA //Derived 클래스 { public: BBB(){ } BBB(int j){ } 그림 7 -4 }; int main(void) { BBB b 2; return 0; } 그림 7 -5



상속 클래스의 설계 실습 1. 은행 계좌번호를 담을 수 있도록 정의된 Account클래스 class Account { private : char acc_num[10]; int balance; public: Account(char* num, int bal) { strcpy(acc_num, num); balance = bal; }}; 2. Main함수 int main(void) { KBAccount acc(“ 1234 -5678”, 5000, 10000); acc. Show. Data(); return 0; } 3. 위 클래스를 public 상속하는 KBAccount 클래스를 정의하자. 고객 별 이체한도(trans_limit)을 멤버로 지녀야한다

상속 클래스의 설계 실습(Source) #include <iostream> using namespace std; class Account { private: char acc_num[10]; int balance; class KBAccount : public Account { private: int trans_limit; public: KBAccount() {} KBAccount( char *num, int bal, int transfer ) : Account( num, bal ) { trans_limit = transfer; } public: Account() { } Account( char *num, int bal ) { strcpy( acc_num, num ); balance = bal; } const char *Get. Acc_num() const { return acc_num; } int Get. Balance() const { return balance; } void Show. Data() const { cout << "계좌 번호 : " << Get. Acc_num() << endl; cout << "계좌 잔액 : " << Get. Balance() << endl; cout << "이체 한도 : " << trans_limit << endl; } }; int main( void ) { KBAccount acc( "1234 -5678", 5000, 10000 ); acc. Show. Data(); }; return 0; }

7 -4 protected 멤버 1. protected 멤버 class AAA l 상속 관계에 놓여있을 경우 접근을 허용 l 그 이외는 private 멤버와 동일 l Basic. Inheri 4. cpp { private: int a; protected: int b; int main(void) }; { class BBB : public AAA aaa; {public: aaa. a=10; aaa. b=20; void Set. Data(){ return 0; a=10; b=20; }};



7 -5 세 가지 형태의 상속 상속 class Base int main(void) { { Derived object; private: int a; protected: int b; return 0; Private 로 선언된 a는 접근 불가로 }; Protected로 선언된 b는 protected로 public: int c; Public으로 선언된 c는 public으로 상속 }; class Derived : public Base // public 상속 { // EMPTY }; 그림 7 -8

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

7 -6 하는 상속을이유 하는 이유 7 -6 상속을 2. 문제의 해결 class Vehicle { int passenger; int baggage; public: Vehicle(int person=0, int weight=0); void Ride(int person); //탑승하다. void Load(int weight); //짐을 싣다. }; Airplane Train
- Slides: 17