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 类的实现?
最佳答案
你可以引入一个类型参数 T
在 Eq
并导出 Day
来自 Eq<Day>
强制执行所需的 operator==
签名.
关于c++ - 实现抽象类的类中的多态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28545574/