반응형
Notice
Recent Posts
Recent Comments
Link
Brise
[C++ 기본3] 6. Upcasting 본문
반응형
파생클래스 포인터를 기반클래스 포인터로 캐스팅하여 사용하는 것을 업캐스팅이라 한다.
업캐스팅을 이용하면 여러 종류의 클래스를 하나의 코드로 운용 가능하다는 장점이 있다.
// 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