본문 바로가기

Language/C++

객체 포인터!

상속된 객체와 포인터 관계

상속된 클래스의 포인터 변수로 상속 받은 클래스의 객체의 주소를 담을수가 있다.

이는 is a 관계에 의거하여 가능하다고.....


#include <iostream.h>

//using std::endl;
//using std::cout;

class A{
    void a()
    {
        cout<<"a()"<<endl;
    }
};

class B:public A
{
    void b()
    {
        cout<<"b()"<<endl;
    }
};

class C:public B
{
     void c()
     {
         cout<<"c()"<<endl;
     }
};

void main()
{
    C* c = new C();
    B* b = c;
    A* a = b;
//같은 곳을 가리킬수는 있지만 각각 호출되는 범위가 틀리다.
    c->a();
    c->b();
    c->c();

    b->a();
    b->b();

    a->a();
}
하지만 포인터객체로 멤버 함수를 호출할때는 포인터 객체가 같은 곳을 가리키지만 호출되는 범위가 각각 틀리다.
Base클래스쪽으로 갈수록 속성이 일반화 되며, 호출할수 잇는 영역도 좁아진다. 하지만 Derived 클래스로 갈수록
속성이 세부화되고, 호출할수 있는 함수의 범위는 상속을 받은 모든 클래스의 함수를 호출 가능하다.