프로그래밍 공부
작성일
2023. 10. 10. 16:08
작성자
WDmil
728x90

부모 클래스의 포인터나 참조를 사용하여 자식 클래스의 객체로 변환하는것을 의미한다.

 

엄격한 형변환으로 형변환 연산자를 사용하여 수행해야한다.

 

  1. 업케스팅 된 객체를 다시 원래 파생클래스로 되돌릴 수 있다.
  2. 업케스팅된 객체가 실제로 어떤 파생 클래스 객체인지 확인할 수 있다.

주의!

잘못된 다운케스팅은 런타임 에러를 발생시킬 수 있다.

다운케스팅은 모든 경우에 사용할 수 있는것이 아니다.

 

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