프로그램/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
// 동종을 보관하는 컨테이너를 만들수 있다
}
다만, 업캐스팅을 수행한 이후에는 원래 파생클래스가 무엇이었는지 알 수 없기 때문에 파생클래스를 알기 위한 방법을 마련하여야 한다.
반응형