在我问我的问题之前:是的,这是大学的作业。
任务非常简单:实现带有附加功能的 Whist 纸牌游戏。助手希望我们与继承“见面”(这是我第二次学习这门课程,所以,我知道它是什么)并告诉我们为我们的 Card 类使用以下内容:创建一个基类 Card 从中派生根据他们拥有的花色(心形,钻石,...),继承了 4 个类。
我发现我自己在这里使用继承很奇怪(因为这些类.fSuit
无论如何都会有数据成员)而且我们还没有看到virtual
,所以我们不会在这里使用它。这并不难编码,但我遇到的问题是:我们需要派生operators
来比较卡片,但派生类可能不会相互比较(编译器应该根据助手抛出错误)。我第一次使用friend bool operator<(Card&, Card&)
,但我了解到友元函数与派生类没有任何关联,派生类的处理就好像它们是基类一样。
我应该如何让我的代码按照他想要的方式工作?我知道我可以停止使用friend
并将运算符作为 Card 类的一部分,但我仍然可以将派生类相互比较。我错过了什么吗?提前非常感谢。
ps:如果它以任何方式编写解决方案都不干净,我不妨在比较之前检查我的 Card 类的操作符部分中的套装。
编辑:他还想让一个运算符 def/decl 一次为所有派生类工作。为每个派生类创建一个友元运算符也是一种可能的解决方案。