7.31(화) C++ - 상속관계 활용하기

from Study/C++ 2007/08/02 14:00 view 20056

// 1. 부모* = &자식 
// 2. 1.이 주로 어떻게 활용 되는가??

// 장점 : 동일한 기능 부여!!, 모든 type을 저장하는 컬렉션 제공.


class object

{

};


class
Animal

{

public:

        int age;

};

 

class Dog : public Animal{};

class Cat : public Animal{};

 

// DogCat의 객체를 받기 위해서는 오버로딩으로 두번 써주지만..

// 부모를 이용하면 간단해진다.

void NewYear( Dog* p )

{

        p->age++;

}

void NewYear( Cat* p )

{

        p->age++;

}

/////////////////////////////////////////////

//void NewYear( void* p ) // 모든 type을 받을 수 있지만 구분을 못한다.(?)

void NewYear( Animal* p ) //모든 동물의 객체를 처리 할 수 있다.

{

        p->age++;

}

 
void main()

{

        Dog d;

        NewYear( &d );

 

        Cat c;

        NewYear( &c );

 

        Dog* p1 = new Dog;

//      int* p2 = new Dog;            // error

        Animal* p3 = new Dog;  // ok.. 부모* = &자식

 

        Dog d2;

        Animal& r4 = d2;       // ok.

        Animal o = d2; // ok.  liskov Substitution 리스코프의치환법칙.

}


//////////////////////////////////////////////////////////////////////////

class object

{

};


class
list

{

        struct Node

        {

               object* data;

               Node*   next;

        };

public:

        void Add( object* ob)

        {

               cout << "list::Add()" << endl;

        }

};

class Car : public object

{

};

class People : public object

{

};


// Car
전용Collection 을설계하자.

// strong type Collection - Adapter 패턴을활용해서만든것.

class Carcollection

{

        list st;

public:

        void Add( object* p ) { st.Add( p ); }

};

 

void main()

{

        Carcollection st;

 

        Car c;

        st.Add( &c );          // ok. 어짜피object의자식이다.

 

        People p;

        st.Add( &p );          // ok. Peopleobject의자식이다.

}

 

Tag |

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다