sti*_*til 5 c++ virtual inheritance
请考虑以下代码示例
#include <iostream>
using namespace std;
class Color
{
public:
virtual void mixColors(Color &anotherColor) = 0;
};
class RGB : public Color
{
public:
void mixColors(RGB &anotherColor);
};
void RGB::mixColors(RGB &kol)
{
return RGB(0xABCDEF);
}
Run Code Online (Sandbox Code Playgroud)
我完全知道为什么这个代码不工作(mixColors()在RGB未实现纯虚函数,因为它有不同的参数集).但是,我想问一下是否有另一种方法可以解决这个问题.假设我想混合颜色,但是对不同的颜色类使用不同的算法.我将不胜感激任何帮助.
无论如何,为什么这里需要一个虚拟方法?
如果混合RGB颜色只有在参数是另一种 RGB 颜色时才有意义,那么为什么应该有一个通用mixColor(Color)方法。
如果您确实需要它,您可以覆盖并执行动态转换:
class RGB : public Color
{
public:
void mixColors(RGB &anotherColor);
void mixColors(Color &c) override { return mixColors(dynamic_cast<RGB&>(c)); }
};
void RGB::mixColors(RGB &kol)
{
return RGB(0xABCDEF);
}
Run Code Online (Sandbox Code Playgroud)
这样,如果您尝试将 RGB 与不同类别的颜色混合,您将在运行时遇到异常。