// 1. 부모* = &자식
// 2. 1.이 주로 어떻게 활용 되는가??
// 장점 : 동일한 기능 부여!!, 모든 type을 저장하는 컬렉션 제공.
class object
{
};
class Animal
{
public:
int age;
};
class Dog : public Animal{};
class Cat : public Animal{};
// Dog와 Cat의 객체를 받기 위해서는 오버로딩으로 두번 써주지만..
// 부모를 이용하면 간단해진다.
void NewYear( Dog* p )
{
p->age++;
}
void NewYear( Cat* p )
{
p->age++;
}
/////////////////////////////////////////////
//void NewYear( void* p ) // 모든 type을 받을 수 있지만 구분을 못한다.(?)
void NewYear( Animal* p ) //모든 동물의 객체를 처리 할 수 있다.
{
p->age++;
}
{
Dog d;
NewYear( &d );
Cat c;
NewYear( &c );
// 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. People도object의자식이다.
}