Brise

[C++ 기본3] 6. Upcasting 본문

프로그램/C,C++

[C++ 기본3] 6. Upcasting

naudhizb 2022. 5. 15. 15:47
반응형

파생클래스 포인터를 기반클래스 포인터로 캐스팅하여 사용하는 것을 업캐스팅이라 한다.

업캐스팅을 이용하면 여러 종류의 클래스를 하나의 코드로 운용 가능하다는 장점이 있다.

// 6_Upcasting1.cpp      140 page ~
#include <vector>

class Animal
{
public:    int age;
};
class Dog : public Animal
{
public:    int color;
};
int main()
{
    Dog     dog;
    Dog*    p1 = &dog; // ok
    Animal* p2 = &dog; // ok. 파생클래스의 주소를
                    // 기반 클래스 타입의 포인터에 담을수있다

    //p2->color = 10; // error. Animal* 로는 Animal의 멤버만
                    // 접근 가능하다.

    static_cast<Dog*>(p2)->color = 10;
}

// 핵심 1. 기반 클래스포인터에 파생클래스 주소 담을수 있다.
//      2. 하지만 파생클래스 고유에 멤버에는 접근 안됨.
//      3. 접근하려면 다시 파생클래스 타입으로 캐스팅해야 한다
// 6_Upcasting1.cpp      140 page ~
#include <vector>

class Animal
{
public:    int age;
};
class Dog : public Animal
{
public:    int color;
};
int main()
{
    // Upcasting 활용/장점
    std::vector<Dog*> v1;  // Dog 만 보관하는 vector

    std::vector<Animal*> v1;  // 동종(모든 동물)을 보관하는vector

    // 동종을 보관하는 컨테이너를 만들수 있다

}

다만, 업캐스팅을 수행한 이후에는 원래 파생클래스가 무엇이었는지 알 수 없기 때문에 파생클래스를 알기 위한 방법을 마련하여야 한다.

반응형

'프로그램 > C,C++' 카테고리의 다른 글

[C++ 기본 4] 1. 가상소멸자  (0) 2022.05.17
[C++ 기본3] 8. mangling  (0) 2022.05.15
[C++ 기본3] 7. 가상함수  (0) 2022.05.15
[C++ 기본3] 5. 상속  (0) 2022.05.15
[C++ 기본3] 4. 상수멤버함수  (0) 2022.05.15
C++ Design Pattern  (0) 2022.04.07
[C++ 기본 3] 3. this  (0) 2022.04.04
Comments