Что касается этой части коды:Разыменование 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