1

此代码不起作用。

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() 有什么含糊不清的地方?

4

1 回答 1

3

模棱两可的部分是由于您的类层次结构中有 2 个函数具有相同的函数名称,但不同(即Square::Pos彼此Collidable::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;
}
于 2013-11-13T19:57:45.407 回答