このコードに関して:
#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;
}