gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:03:30 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com