此代码不起作用。
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()时有什么含糊之处,只有一个定义呢?
答案 0 :(得分: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;
}