访问派生类的成员

时间:2013-12-08 22:32:40

标签: c++

我有一个基类和一个派生自它的类。在下面的示例中,Frame_PicBase_Pic的派生类,其中的详细信息未包括在内。 Frame_Pic有成员,verticalhorizontalcorners不在基类中。 Picture是一个接口类,基本上包含指向Base_Pic的指针。

当我尝试在下面的reframe函数中为这些值分配新值时,我收到一条错误消息,指出Base_Pic没有此类数据成员。

操作pic.p->vertical会认为我正在访问基类。如果我将这些数据成员放在基类中,那么我的其余函数的编写方式将无法满足这一要求。如何分配这些数据成员?

Picture frame(const Picture& pic, char v, char c, char h)
{
    Frame_Pic* temp = new Frame_Pic(pic.p);
    temp->vertical = v;
    temp->horizontal = h;
    temp->corners = c;
    Picture temp2(temp);
    return temp2;
}

void reframe(Picture& pic, char v, char c, char h)
{
    pic.p->vertical = v;
    pic.p->horizontal = h;
    pic.p->corners = c;
}

3 个答案:

答案 0 :(得分:0)

不要直接访问它们,而是使用Picture接口为这些成员声明set和get方法(假设两者都需要),并在派生类中实现它们。

对成员变量的直接访问不会多态,因此您的错误。

答案 1 :(得分:0)

听起来你想要在为函数提供指向基类型的指针的同时设置派生类的项。这样做的方法是在基类中创建一个虚函数,并在派生类中实现它。

例如

......

virtual void BaseClass::SetupSomeStuff(...) {
}

void DerivedClass::SetupSomeStuff(...) {
your assignments here
}

答案 2 :(得分:0)

你应该重新思考你编写函数的方式以及类的交互方式。
Reframe可能是Frame_Pic的函数成员,但其功能与类Frame_Pic的任何实例无关。事实上,既然你可以肯定地知道Picture拥有一个指向Base_pic的指针,那么它也可以拥有一个指向不同类的实例的指针,该实例派生Base_pic没有定义名为vertical,horizo​​ntal或corners的成员。

您应该像在第一个函数中一样创建一个新的Frame_pic实例,并将Picture中的指针设置为该新实例。您可能还希望将这两个函数标记为static(如果不是)。