2.6 multiple inheritance (다중 상속)
① 의미 : 하나 이상의 class로 부터 inheritance받는 것.
② multiple inheritance하에서의 class 계층 구조는 DAG(Directed Acyclic Graph)구조를 갖음.
③
eg. class List { /*.....*/ };class Outputs : public List { /*.....*/ };
class Inputs : public List { /*.....*/ };
class Jobs
: public Outputs, public Inputs {
// .....
};
→ Outputs에서 사용하는 List와 Inputs에서 사용하는 List구조가 서로 독립적으로 존재. 그러므로 Jobs class에서 두개의 List구조가 중복하여 존재함.
④ ③과 같이 base class들을 중복하여 상속받는 것이 적당하지 않은 경우.
→ 하나의 class만을 공통으로 상속받을 수 있도록 하기 위해 virtual base class(가상 베이스 클래스)라는 개념이 있다.
eg. class List { /*.....*/ };class Outputs : public virtual List { /*.....*/ };
class Inputs : public virtual List { /*.....*/ };
class Jobs
: public Outputs, public Inputs {
// .....
};
유도된 클래스
(Derived Classes)
[ 이전으로]
class Person {// ..... }; class Student : public Person { // ..... }; |
void f(){ Person p1, p2; Student s1, s2; Person* plist; plist = &s1; // 리스트의 처음을 표시 s1.next = &p1; // s1과 p1을 연결 p1.next = &s2; // p1과 s2를 연결 s2.next = &p2; // s2와 p2를 연결 p2.next = 0; // p2가 끝임을 표시 } |
e.g.,class Y { //..... }; class X : public Y { //..... }; Y y; X x; ① y = x; // O.K. (구겨져서 assign!!!) ② x = y; // ERROR. |
eg. class List { /*.....*/ };class Outputs : public List { /*.....*/ }; class Inputs : public List { /*.....*/ }; class Jobs : public Outputs, public Inputs { // ..... }; |
eg. class List { /*.....*/ };class Outputs : public virtual List { /*.....*/ }; class Inputs : public virtual List { /*.....*/ }; class Jobs : public Outputs, public Inputs { // ..... }; |
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.