从基类指针获取派生成员

时间:2014-08-16 21:37:30

标签: c++ pointers

我被告知基类指针可以指向该基类的任何派生类型。但是,我需要访问此派生类,即使该参数正在调用指向基类的指针。

此处Meeting是派生类型,ListItem是基本类型,CompareByInsertKey是由Meeting::CompareByInsertKey覆盖的ListItem中的强制纯虚函数,Meeting }有一个名为thisdate的结构,其成员为year。在这种情况下,item_in_list将是一个会议类型,但显然指针仍然有效,即使它是派生类型。

int Meeting::CompareByInsertKey(ListItem* item_in_list)
{
    int compare = (*item_in_list).thisdate.year;
    return compare;

}

如何允许此方法接受派生或基类参数并允许它使用派生类成员?

换句话说,我需要在派生类型的方法中访问派生类型的私有成员。问题是CompareByInsertKey函数必须采用基类指针才能覆盖纯virtual ListItem::CompareByInsertKey

谢谢, 如果您需要更多信息,请告诉我

2 个答案:

答案 0 :(得分:2)

您应该使用dynamic_cast,如下所示:

int Meeting::CompareByInsertKey(ListItem* item_in_list)
{
    Meeting *meeting = dynamic_cast<Meeting*>(item_in_list);
    // dynamic_cast returns a null pointer if the passed pointer is not
    // of the requested type
    if(meeting == 0) {
       ...
    } 
    int compare = meeting->thisdate.year;
    return compare;
}

答案 1 :(得分:0)

今天你设置它的方式,我能看到的唯一方法是使用dynamic_cast进行类型检查和转换。这可确保不传入不匹配的类型。

int Meeting::CompareByInsertKey(ListItem* item_in_list)
{
    Meeting* meeting = dynamic_cast<Meeting*>(item_in_list);
    if(NULL != meeting)
    {
        int compare = meeting->thisdate.year;
        return compare;
    )
    else // return error value
}