728x90
부모 클래스의 포인터나 참조를 사용하여 자식 클래스의 객체로 변환하는것을 의미한다.
엄격한 형변환으로 형변환 연산자를 사용하여 수행해야한다.
- 업케스팅 된 객체를 다시 원래 파생클래스로 되돌릴 수 있다.
- 업케스팅된 객체가 실제로 어떤 파생 클래스 객체인지 확인할 수 있다.
주의!
잘못된 다운케스팅은 런타임 에러를 발생시킬 수 있다.
다운케스팅은 모든 경우에 사용할 수 있는것이 아니다.
class Animal {
public:
virtual void makeSound() {
cout << "Animal makes a sound" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Dog barks" << endl;
}
};
int main() {
Dog myDog;
Animal* animalPtr = &myDog; // Upcasting
// Downcasting using dynamic_cast
Dog* dogPtr = dynamic_cast<Dog*>(animalPtr);
if (dogPtr) {
dogPtr->makeSound(); // Output: "Dog barks"
} else {
cout << "Not a Dog" << endl;
}
return 0;
}
위 코드에서는 Animal 포인터로 myDog를 업케스팅 하였지만, 다시 Dog포인터로 다운케스팅을 시도하고, 성공하였을 시, makeSound를 실행하고 실패시 개가 아님을 반환한다.
728x90
'컴퓨터 용어 정리' 카테고리의 다른 글
단위행렬(Identity matrix) (0) | 2023.10.12 |
---|---|
가상함수 ( Virtual Function ) (0) | 2023.10.10 |
업 케스팅(Up casting) (0) | 2023.10.10 |
멀티셈플링 Multisampling(표본화) (0) | 2023.10.05 |
Graphic PipeLine (0) | 2023.07.13 |