0

你如何测试一个对象以查看它是否具有某个成员?或者有没有办法查看一个对象是否是某个类的实例?

我正在使用字符图片的继承结构。有 String_Pics、HCat_Pics、VCat_Pics 和 Frame_Pics。它们都源自 Pic_Base。用户使用包含指向对象的智能指针的句柄类“图片”。每个对象都存储一个指向它所基于的图片的指针(另一张图片的一帧,水平连接的两张图片等)。

例如:一个围绕 VCat-Pic 的 Frame-Pic,并且 VCat-Pic 中的两个图片都是围绕 String_Pics 的 Frame_Pics。

***************
*             *
* *********** *
* * This    * *
* * is      * *
* *********** *
* *********** *
* * The     * *
* * Example * *
* *********** *
*             *
***************

Frame_Pics 具有“帧字符”的数据成员,但没有其他类。我正在编写一个函数,它将递归地更改结构中每一帧的帧字符。也许我错过了一种方法来做到这一点,但我正在寻找一种方法来测试我正在处理的对象是否是 Frame_Pic ,从而尝试更改框架字符是否意味着什么.

我的第一直觉是尝试类似if (p->frame_char)where frame_char 是 Frame_Pic 数据成员之一的名称,但我不知道该怎么做。

4

2 回答 2

2

您可以尝试将指针动态转换为 aFrame_pic并查看它是否返回非空值。

Frame_Pic *frame =dynamic_cast<Frame_Pic*>(p);
if(frame  != nullptr){
    //It is Frame_Pic
    frame->frame_char;
}

不过,这样做并不是一个好主意cast。尝试编写虚拟函数来消除对它的需求。

于 2013-01-16T02:39:06.210 回答
1

事实证明,我真的不需要对会员资格进行直接测试。这实际上是一个非常适合多态性的问题:

我在 Pic_Base 中声明了一个virtual函数“reframe”,并定义了“frame”的版本以更改字符,并为其他类定义了在必要时通过嵌套图片递归的版本。

于 2013-01-16T04:05:37.023 回答