关于这段代码:
#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;
}