使用不同的参数集"重载"纯虚函数

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未实现纯虚函数,因为它有不同的参数集).但是,我想问一下是否有另一种方法可以解决这个问题.假设我想混合颜色,但是对不同的颜色类使用不同的算法.我将不胜感激任何帮助.

gex*_*ide 2

无论如何,为什么这里需要一个虚拟方法?

如果混合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 与不同类别的颜色混合,您将在运行时遇到异常。