c++ - 实现抽象类的类中的多态函数

标签 c++ abstract-class

class Eq
{
public:
    virtual bool operator==(Eq operand) = 0;
};

class Day : public Eq
{
public:
    enum DAY
    {
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday
    } day;
    Day(DAY init_day) : day(init_day){}
    bool operator==(Day operand)
    {
        return day == operand.day;
    }
};

int main()
{
    Day d1(Day::Monday);
    Day d2(Day::Monday);
    d1 == d2;
    return 0;
}

这是我试图实现的代码。类 Eq 的工作方式类似于 JAVA 的接口(interface)。它只有一个成员函数,operator==。 Operator== 接受一个与派生 Eq 类的类类型相同的操作数。例如,类 Day 派生了 Eq,因此它必须实现 operator== ,它接受 Day 类型的参数。

问题来了。首先,两个 operator== 函数都有不同的签名。所以编译器认为它们不是相同的函数,而是重写的函数。其次,如果此代码中的任何函数采用 Eq 类参数,则编译器会出错,因为抽象类的实例不可用。

这就是问题所在。如何让 T 类中的 operator== 函数接受 T 类参数,其中 T 是 Eq 类的实现?

最佳答案

你可以引入一个类型参数 TEq并导出 Day来自 Eq<Day>强制执行所需的 operator== 签名.

关于c++ - 实现抽象类的类中的多态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28545574/

相关文章:

c++ - 算法 - 关于序列中位数的许多查询

magento - 如何修改Magento中抽象类的代码?

c++ - C/C++编译器可以以任何方式内联C回调函数吗?

c++ - 如何覆盖派生类中的虚函数?

c++ - 如何使继承层次结构中的成员函数始终返回相同的值?

c++ - 模板更喜欢子类函数而不是更专业的继承函数

c++ - 通过接口(interface)完成 copy-and-swap

java - 为什么界面有帮助?

android - 在派生 Activity 的 onCreate 之后调用抽象 Activity 中的方法

c++ - 我可以在 C++ 接口(interface)(抽象类)中包含什么