Mfc 如何使用IsKindOf()函数检查两个对象?

Mfc 如何使用IsKindOf()函数检查两个对象?,mfc,visual-c++,Mfc,Visual C++,我知道ISKINDOF()函数用于比较声明为DECLARE\u DYNAMIC的两个类对象 CSample *sample1, *sample2; sample1.ISKINDOF(sample2); 但问题是如何比较未声明的对象指针DECLARE\u DYNAMIC CSample *sample1, *sample2; sample1.ISKINDOF(sample2); 上面的示例肯定会显示错误 是否有检查上述约束的功能 注意,此解决方案确实需要从COb

我知道ISKINDOF()函数用于比较声明为DECLARE\u DYNAMIC的两个类对象

    CSample *sample1, *sample2;
    sample1.ISKINDOF(sample2);
但问题是如何比较未声明的对象指针DECLARE\u DYNAMIC

    CSample *sample1, *sample2;
    sample1.ISKINDOF(sample2);
上面的示例肯定会显示错误


是否有检查上述约束的功能

注意,此解决方案确实需要从CObject派生并使用
DECLARE\u DYNAMIC
IMPLEMENT\u DYNAMIC
。有什么原因不能使用它们吗

获取对象的运行时类,该类应与另一个对象的运行时类或超类相同。假设您认为sample2是sample1的同一类或超类:

CRuntimeClass* pClass = sample2->GetRunTimeClass();
BOOL sample1IsKindOfSample2 = sample1->IsKindOf(pClass);

如果您的VC++代码是编译的/GR(这是最近的编译器/IDE中的默认值),那么您可以使用dynamic_cast来探索对象的运行时类型

然而,正如DWO在其评论中暗示的那样,使用ISKINDOF等人的设计通常应该被其他设计(如虚拟功能)所取代


Martyn

我认为真正的问题是更深一层的,你在为错误的问题寻找解决方案。为什么需要检查这些指针?但仍然需要从
CObject
派生来执行此操作。我的错误是,我错过了关键元素。