(C++ : Design-pattern) Upcasting

Posted by : at

Category : Cpp   Design-pattern


Upcasting이란

상속을 동족끼리 묶을때 사용한다는 개념으로 사용된다.

class Animal
{
    int age;
};

class Dog : public Animal
{
    int color;
};

int main()
{
    Dog d;
    Dog* p1 = &d;           // ok
    double* p2 = &d;        // error
    Animal* p3 = &d;        // ok - upcasting
}

주의할 점은?

class Animal
{
    int age;
public:
    void Cry() { cout << "Animal Cry" << endl; }
};

class Dog : public Animal
{
    int color;
public:
    // override
    void Cry() { cout << "Dog Cry" << endl; }
};

int main()
{
    Dog d;
    Animal* p = &d;

    p->Cry();   // "Animal Cry" -> 포인터를 보고 따라간다.
    // 단, 자바와 C#에서는 Dog를 부름
}
// 만약 Dog Cry를 부르고 싶다면?
class Animal
{
    int age;
public:
    virtual void Cry() { cout << "Animal Cry" << endl; }
};

class Dog : public Animal
{
    int color;
public:
    // override
    virtual void Cry() override { cout << "Dog Cry" << endl; }
};

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links