이 부분은 혼란 스럽습니다. dynamic_cast를 사용하여 포인터 사이의 변환 결과가 대상 유형의 유효한 전체 개체인지 확인하는 동안 유효한 완전한 개체 인 이 의미하는 바를 얻을 수 없습니다.유효한 완전한 개체 의미는 무엇입니까?
#include <iostream>
#include <exception>
using namespace std;
class Base { virtual void dummy() {}
};
class Derived: public Base {public:
void print(){cout << "NiGHt!\n";
int a; };
int main() {
try {
Base * pba = new Derived;
Base * pbb = new Base;
Derived * pd;
pd = dynamic_cast<Derived*>(pba);
if (pd==0) cout << "Null pointer on first type-cast.\n";
pd = dynamic_cast<Derived*>(pbb);
if (pd==0) cout << "Null pointer on second type-cast.\n";
} catch (exception& e) {cout << "Exception: " << e.what();}
return 0;
}
이 두 줄이 변환 결과가 성공했다는 것을 나타내는 경우 포인터 pba를 사용하여 파생 클래스에 들어갈 수없는 이유는 무엇입니까? Derived
개체에 대한 포인터를 가리키는에 :
pd = dynamic_cast<Derived*>(pba);
if (pd==0) cout << "Null pointer on first type-cast.\n";
두 번째 캐스트는 실제 코드에서 성공하지 못합니다. – juanchopanza
[dynamic_cast] (http://www.cplusplus.com/doc/tutorial/typecasting) 비공식적으로 전체 유형의 객체를 말할 수 있으며 완전히 정의 된 클래스에 속한 객체 인스턴스입니다. 클래스는 [this] (http://pastebin.com/nEA9wiDp)와 같이 불완전한 유형의 객체를 멤버로 사용할 수 있습니다. – iamOgunyinka
들여 쓰기 수정 – zoska