dynamic_cast2 [C++] 상속과 RTTI 상속과 RTTI 함수가 인자로 기반 클래스의 포인터를 받으면 - 기반 클래스 뿐 아니라 모든 파생 클래스를 전달 받을 수 있다. 기반 클래스 포인터로 파생 클래스의 고유 멤버에 접근 할 수 없다. - 파생클래스의 고유 멤버에 접근하려면 파생 클래스 타입으로 캐스팅 (다운 캐스팅, downcasting) 해야 한다. #include #include class Animal {}; class Dog : public Animal { public: int color; }; void foo(Animal* p) { // p가 Dog 이라면 p->color = 10; // error } int main() { Animal a; foo(&a); Dog d; foo(&d); } 아래와 같이 p는 Animal 클래스 형태로.. 2021. 12. 30. [C++] Explicit Casting (명시적 캐스팅) C++ Explicit Casting (C++ 명시적 캐스팅) C의 캐스팅이 논리적이지 않고, 위험성이 있으며, 버그 가능성이 높다. 그래서 C++에서는 새로운 캐스팅 방법을 소개하고 있다. C언어의 캐스팅 방법 : int* p1 = (int*)malloc(sizeof(int)*10); // C언어의 캐스팅 방법 : C++에서도 사용은 가능하다. C++의 캐스팅 방법 : #include #include int main() { int* p1 = static_cast(malloc(sizeof(int)*10)); // C++ 에서 사용하는 캐스팅 방법 free(p1); } C언어 방식의 캐스팅의 단점 : 아래 두 가지 경우가 대표적인 c언어에서 발생할 수 있는 캐스팅 문제이다. 단점 예제 (1) : #incl.. 2021. 8. 14. 이전 1 다음