gpt4 book ai didi

c++ - 重载运算符 << 输出地址而不是数据成员

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:23 25 4
gpt4 key购买 nike

我正在尝试使 operator<< 过载但我一直在获取地址作为输出。

例如 Card *c = new Card(5,3);

然后如果我尝试用我的重载 operator<< 输出卡片,

地址输出而不是说“5 of Clubs”

cout << c;    //0x100100ff0  ?????????????

//Card.h

#ifndef JS_CARD_H
#define JS_CARD_H

#include <ostream>
using std::ostream;

#include <string>
using std::string;

#include <vector>
using std::vector;

namespace JS {
class Card {

friend ostream &operator<<(ostream &out, const Card &rhs);

public:
enum Suit { DIAMONDS, HEARTS, SPADES, CLUBS };
enum Rank { ACE = 1, JACK = 11, QUEEN = 12, KING = 13 };

Card(int rank, int suit) : rank(rank), suit(suit){}

string getRank() const;
string getSuit() const;
int getRankValue() const;

int operator+(const Card& rhs);
void displayCard(const Card &rhs);

private:
int rank;
int suit;
};

}

#endif

//Card.cpp

ostream
&operator<<(ostream &out, const Card &rhs) {

out << rhs.getRank() << " o f" << rhs.getSuit();

return out;
}

string
Card::getSuit() const {

switch (suit) {
case SPADES: return "Spades"; break;
case HEARTS: return "Hearts"; break;
case DIAMONDS: return "Diamonds"; break;
case CLUBS: return "Clubs"; break;
default: return ""; break;
}
}

string
Card::getRank() const {
switch (rank) {
case ACE: return "Ace"; break;
case JACK: return "Jack"; break;
case QUEEN: return "Queen"; break;
case KING: return "King"; break;
default:
stringstream out;
out << rank;

return out.str();
break;
}
}

//main.cpp

#include "Deck.h"
#include "Card.h"

#include <iostream>
using std::cout;

using namespace JS;

int main(int argc, const char * argv[]) {

Card *c = new Card(5,3);
Card *c1 = new Card(1,1);

cout << c; //0x100100ff0 ?????????????
cout << '\n'; //5 of Clubs
c->displayCard();

return 0;
}

最佳答案

c 不是 Card 对象。它是一个指向 Card 对象的指针。如果你想和它一起使用你的操作符,你需要取消引用它,就像这样:

cout << *c;

但是,为什么 c 还是一个指针呢?如果你想要一个 Card 对象,就做一个。这里没有理由进行动态分配。

Card c(5, 3);
cout << c;

无论如何,您的代码存在内存泄漏。对于每个 new,您都需要一个 delete。停止使用 new,您就不需要 delete

关于c++ - 重载运算符 << 输出地址而不是数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255658/

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