는 : 역 참조 typecasted 무효 * 객체 포인터 코드의이 부분에 관해서
#include <iostream>
class CClass1
{
public:
void print() {
std::cout << "This should print first" << std::endl;
}
};
class CClass2
{
public:
void print() {
std::cout << "This should print second" << std::endl;
}
};
그래서 누군가가 (말하자면) 다른의 여러 인스턴스를 가리 할 수있는 "자유 포인터를"문제에 대해 흥미로운 질문을 새로운 유형의 객체를 만들 필요없이 객체를 생성 할 수 있습니다. 이 포인터는 유형이
void *
일 수 있으며 무효이므로 객체의 모든 인스턴스를 가리키고 객체의 공용 속성에 액세스 할 수 있다고 생각할 수 있습니다.
다음 솔루션은 제출 :
int main() {
void *pClass(NULL);
((CClass1 *)(pClass))->print();
((CClass2 *)(pClass))->print();
std::cin.ignore();
return 0;
}
내 질문입니다 위의 작업을 수행하지만, 이것은하지 않는 이유 :
int main() {
(CClass1 *FG)->print();
(CClass2 *FG)->print();
std::cin.ignore();
return 0;
}
첫 번째 것도 작동하지 않습니다. 적절한 대상을 가리키고 있지 않습니다. – chris
그것은 나를 위해 잘 컴파일 된 이유입니다. 그래서 실험을 시작한 이유입니다. @chris 정확히 제가 왜 놀랍습니까? 실제 개체가 가리킬 수 없기 때문에 효과가 있었지만 여전히 정확한 것을 인쇄했기 때문입니다. – smac89
그 것을 좋아하게 될 것입니다. 그것을 컴파일하는 것은 전투의 절반, 일반적으로 쉬운 반이다. – chris