C++ 继承比较运算符,但不能相互比较派生类

C++ 继承比较运算符,但不能相互比较派生类,c++,inheritance,operators,friend,C++,Inheritance,Operators,Friend,在我提问之前:是的,这是大学的作业 任务非常简单:使用附加功能实现惠斯特牌游戏。助手希望我们“会见”继承(这是我第二次学习这门课程,所以,我知道它是什么),并告诉我们在我们的卡片类中使用以下内容:创建一张基类卡片,根据它们的套装(心脏、钻石等),从中派生4个继承类 我自己也觉得在这里使用继承非常奇怪(因为这些类无论如何都会有.fSuit数据成员),而且我们还没有看到虚拟的,所以我们不会在这里使用它。这并不难编码,但我的问题是:我们需要派生运算符来比较卡片,但派生类可能无法相互比较(根据助手的说法

在我提问之前:是的,这是大学的作业

任务非常简单:使用附加功能实现惠斯特牌游戏。助手希望我们“会见”继承(这是我第二次学习这门课程,所以,我知道它是什么),并告诉我们在我们的卡片类中使用以下内容:创建一张基类卡片,根据它们的套装(心脏、钻石等),从中派生4个继承类


我自己也觉得在这里使用继承非常奇怪(因为这些类无论如何都会有
.fSuit
数据成员),而且我们还没有看到
虚拟的
,所以我们不会在这里使用它。这并不难编码,但我的问题是:我们需要派生
运算符来比较卡片,但派生类可能无法相互比较(根据助手的说法,编译器应该抛出一个错误)。我首先使用了
friend bool操作符我想最简单的解决方案是不实现
操作符这里可以使用friend函数,但必须声明它包含两个参数

class Card {
public:
    friend bool operator<(const Card &c1, const Card &c2);
    ...
};
类卡{
公众:
friend bool运算符如果您需要此

class Card {};
class Hearts : public Card {};
Hearts a,b;
a < b;
类卡{};
类心:公共卡{};
心脏a、b;
a
编译,但不是这个

class Card {};
class Hearts : public Card {};
class Diamonds : public Card {};
Hearts a;
Diamonds b;
a < b;
类卡{};
类心:公共卡{};
钻石类:公共卡{};
心a;
钻石b;
a

那么,如果你知道游戏规则,你就不能提供一个通用的
操作符,也许按照你的老师要求的方式来构建课程是有意义的


在这场游戏中,4名玩家中的每一位都将从常规的52张牌组中获得13张牌。然后,游戏分为13轮,称为“把戏”。在每轮中,最后一轮的获胜者决定必须玩哪一套牌,其他人可以效仿,玩一张王牌(其牌套由捐赠者的最后一张牌决定)或任何其他牌(这将比任何诉讼或特朗普都弱).你的代码是什么样的atm?对于那些对头文件感兴趣的人来说,就像现在一样。看看第一个答案中的回答,我同意它可以解决问题,以防我不必为派生类使用一个运算符函数。在op中编辑,助手说我们应该尝试为每个运算符使用一个函数。是的h my bad,在OP中编辑。尽管如此,我仍然能够相互比较派生类。不过,感谢你,我在参数之后使用常量是相当愚蠢的(因为friend函数不是类的一部分,所以使用friend bool运算符没有任何意义这确实是助手的想法(每轮都有特朗普或某些套装).就在那里!我会继续这样工作,毕竟这都是关于学习的。谢谢你的回答,当我更多地思考你所说的,试图找出一种不同的方法来跟踪游戏中的王牌/套牌时,我实际上可能有一个想法:给牌额外的信息(无论是王牌/套牌)让游戏决定它们是否正确,并在比较之前填写卡片中的数据字段。这可能是多种可能性中的一种。感谢您的回复!