Overload appropriate operatros for class Card so that you ca

Overload appropriate operatros for class Card so that you can compare cards based on rank:

>>> Card(\'3\', \'\') < Card(\'8\', \'\')

True

>>> Card(\'3\', \'\') > Card(\'8\', \'\')

False

>>> Card(\'3\', \'\') <= Card(\'8\', \'\')

True

>>> Card(\'3\', \'\') >= Card(\'8\', \'\')

False

Solution

#include <iostream>
using namespace std;
class Card {
   private:
    char rankSymbol;   //can be values \'2\',...\'9\',\'1\'(for 10),\'J\',\'Q\',\'K\',\'A\'
   int rank;           //2,3,4....9,10,11(for J),12,13,14 (for comparison)
   char color;       //can be values 3,4,5,6 corresponding to symbols Heart, Diamond, Spade and Club
   public:
   Card(char rs, char col){   //constructor to initialize the 3 variables of a card
       rankSymbol = rs;
       color = col;
       setRank(rs);
   }
   void setRankSymbol(char r){       //setter and getter methods for the variables
       rank = r;
   }
   char getRankSymbol(){
       return rank;
   }
   void setColor(char col){
       color = col;
   }
   char getColor(){
       return color;
   }
   void setRank(char rs){           //calculate the integer rank from the char rankSymbol
       rank = (int)rs - (int)\'0\';   //for \'2\',\'3\',....\'9\'
       switch(rs){                   //for \'10\', \'A\' and face cards
           case \'1\':    rank = 10;
                       break;
           case \'J\':   rank = 11;   //can also consider lowercase alphabets
                       break;
           case \'Q\':   rank = 12;  
                       break;
           case \'K\':   rank = 13;
                       break;
           case \'A\':   rank = 14;
                       break;
       }
   }
   int getRank(){
       return rank;
   }
   void display(){
       cout<<\"Card is \"<<rank<<\" of \"<<color<<endl;
   }
      // Overload < operator to compare Card objects.
    const char* operator<(const Card& c) {  
       if(rank < c.rank)
           return \"True\";
       else
           return \"False\";
    }
    const char* operator<=(const Card& c){  
       if(rank <= c.rank)
           return \"True\";
       else
           return \"False\";
    }
    const char* operator>(const Card& c) {  
       if(rank > c.rank)
           return \"True\";
       else
           return \"False\";
    }
    const char* operator>=(const Card& c) {  
       if(rank >= c.rank)
           return \"True\";
       else
           return \"False\";
    }
};

// Main function for the program
int main( ) {
   Card card1(\'A\',(char)3);                // Declare card1 of type Card
   Card card2(\'6\',(char)5);                // Declare card2

   cout<<\"card1 < card2 = \"<<(card1<card2)<<endl;
   cout<<\"card1 > card2 = \"<<(card1>card2)<<endl;

   return 0;
}

Overload appropriate operatros for class Card so that you can compare cards based on rank: >>> Card(\'3\', \'\') < Card(\'8\', \'\') True >>&g
Overload appropriate operatros for class Card so that you can compare cards based on rank: >>> Card(\'3\', \'\') < Card(\'8\', \'\') True >>&g

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site