c++多重继承函数合并
c++ multiple inheritance function merging
我有:
class XILightSource
{
public:
virtual XVec2 position() const = 0;
};
class XLightSprite : public XSprite, public XILightSource
{
};
问题是XSprite
已经具有与position
相同的功能。我怎么能对编译器说,我想使用XSprite::position
函数作为XILightSource::position()
的实现?
重写它并调用XILightSource::position():
class XLightSprite : public XSprite, public XILightSource
{
public:
XVec2 position() const { return XSprite::position(); }
};
只需添加一行:
class XLightSprite : public XSprite, public XILightSource
{
public:
using XSprite::position;
};
实际上,您不需要做任何特殊的操作。
默认情况下,在XLightSprite
中实现XVec2 position() const
将隐藏XSprite
中的position()
,并作为XLightSource
中定义的虚函数的覆盖。
然而,如果你想要澄清你的意图是重写函数,你可以添加using声明
class XLightSprite : public XSprite, public XILightSource
{
public:
using XSprite::position;
XVec2 position() const;
};
请注意,但是,如果XSprite中的position()也是相同格式的虚函数,则新的实现也将作为XSprite中位置的覆盖。
如果class XSprite
已经具有该功能,那么最好的方法是使XSprite
成为XILightSource
的子(因为它是抽象的)。这种方法的优点是不必依赖于不必要的多重继承。例如
class XILightSource
{
public:
virtual XVec2 position() const = 0;
};
class XSprite : public XILightSource
{
public:
virtual XVec2 position() const { ... }
};
class XLightSprite : public XSprite
{
};
相关文章:
- 用于合并排序的合并函数
- C++ 合并字符串以'system'函数错误
- 如何在 c++ 中的析构函数中正确释放合并 LL 的内存?
- 如何合并函数返回的向量?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 如何通过通用引用或std::forward将这三个c++模板函数合并为一个
- 合并 2 个排序的链表。必需的成员函数 bool Merge(List342 &list1):
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- 合并2个不同长度的向量并事先对它们进行排序,而无需排序函数
- 将函数两个向量合并为第三个向量
- 使用不同的比较函数合并两个排序的双向量
- C - 为什么合并函数在递归调用后会逆转数组
- 将 C 结构工厂函数与其相应的 C++ 包装类构造函数合并
- 合并函数参数的适当命名约定是什么?
- 编译器优化合并了相同的函数实现,这意味着在运行时要绕过存根
- C++中的合并排序:无法在合并函数中传递数组 - 转换为'int*'无效
- 调用合并函数时没有输出
- C++中的合并函数算法有问题
- 使用具有 2 个数组作为参数的合并函数进行合并排序
- 为什么我的合并函数会给我一个segfault