gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:51:05 25 4
gpt4 key购买 nike

此代码无效。

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() 有什么不明确的地方?

最佳答案

模棱两可的部分是由于您的类层次结构中有 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;
}

关于c++ - 当有其他虚拟基类时如何避免对基类函数的模糊调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com