当有其他虚拟基类时,如何避免对基类函数的模糊调用

时间:2013-11-13 19:50:43

标签: c++ inheritance interface

此代码不起作用。

class Collidable{
   public:
   virtual Vec2 Pos()=0;
};

class Square{
    Vec2 pos;
    public:
    Vec2 Pos(){
        return pos;
    }
};
class Box:public Square,public virtual Collidable{

};
main(){
    Box bla;
   cout<<bla.Pos()<<endl;
}

但如果我这样做就行了。

class Box:public Square,public virtual Collidable{
   public:
    Vec2 Pos(){
        return Square::Pos();
    }
}

我的问题是我有一个像Square这样的课程,我有很多像Pos()这样的函数,我觉得我不应该说这样的事情

    Vec2 Pos(){
        return Square::Pos();
    }

对于每个单个函数一遍又一遍,这是我原本认为从其他类继承时的默认行为。如何在这里避免大量的还原类型,以及调用Pos()时有什么含糊之处,只有一个定义呢?

1 个答案:

答案 0 :(得分:3)

模糊部分是由于您的类层次结构中有2个具有相同功能名称但功能不同的功能(即Square::PosCollidable::Pos与每个功能无关其他)。您必须说明您在Box课程中使用的功能。在不了解您的其他架构的情况下,很难推荐解决方案,但我猜您在这里确实不需要多重继承。您可以将其更改为:

class Collidable
{
public:
   virtual Vec2 Pos()=0;
};

class Square : public Collidable
{
    Vec2 pos;
public:
    virtual Vec2 Pos()
    {
        return pos;
    }
};

class Box : public Square
{

};

main()
{
    Box bla;
    cout<<bla.Pos()<<endl;
}