I write two override operators(<< for Suit and << for Card) in my code and it seems it does not work sometimes. I tried to call operator for Suit twice in the override operator << for Card. The second did not work, why?
class Card{
public:
enum Suit{CLUBS, SPADES, HEARTS, DIAMOND};
Card(int v, Suit s): value(v), suit(s){};
int getValue()const{return value;}
Suit getSuit()const{return suit;}
private:
int value;
Suit suit;
};
ostream& operator<< (ostream& out, Card::Suit& s){
switch (s) {
case 0:
out << "CLUBS";
break;
case 1:
out << "SPADES";
break;
case 2:
out << "HEARTS";
break;
default:
out << "DIAMOND";
break;
}
return out;
}
ostream& operator<< (ostream& out, Card& c){
Card:: Suit s = c.getSuit();
out << s << endl; //here it output what I want: SPADES
out << "Card with Suit " << c.getSuit() << " Value " << c.getValue() << endl;
return out; //here the c.getSuit() output 1 instead of SPADES, why?()
}
int main(){
Card* c = new Card(1, Card::SPADES);
cout << *c;
return 1;
}