-1

关于这段代码:

#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;
}
4

1 回答 1

1

您的第一个示例通过不指向有效对象的指针调用非静态成员函数来展示未定义的行为。它似乎只是偶然地起作用,因为有问题的功能恰好没有以this任何方式使用。

您的第二个示例很简单,在语法上不正确。我什至不确定您要在那里做什么;代码没有意义。

于 2013-08-24T01:35:26.713 回答