gpt4 book ai didi

c++ - 使用 print 函数输出重载的 << 运算符?

转载 作者:行者123 更新时间:2023-11-27 23:18:37 28 4
gpt4 key购买 nike

我已经成功地重载了我认为称为插入运算符的“<<”运算符。我有一个打印函数,它打印卡片对象实例的信息,当使用运算符时如何调用这个打印函数

例子:

Card aCard("Spades",8);  //generates an 8 of spades card object

aCard.Print(); // prints the suit and value of card

cout << aCard << endl; // will print something successfully but how can I get the same results as if I were to call the print function?

在我的实现文件 card.cpp 中,我重载了 << 以用于我的卡片类。

卡片.cpp

void Card::Print()
{
std::cout << "Suit: "<< Suit << std::endl;
std::cout << "Value:" << Value << std::endl;
}

std::ostream& operator<<(std::ostream &out, const Card &aCard)
{
Print();//this causes an error in the program
}

卡片.h

class Card
{
public:
std::string Suit;
int Value;

Card(){};
Card(std::string S, int V){Suit=S; Value=V};

void Print();

friend std::ostream& operator<<(std::ostream&, const Card&)
};

最佳答案

您只需要一种实现方式。您可以制作一个带有 ostream 的 Print 函数并执行所有打印逻辑,然后从 Print() 调用它和 operator<<

void Card::Print()
{
Print(std::cout);
}

std::ostream& operator<<(std::ostream &out, const Card &aCard)
{
Print(out);
}

void Card::Print(std::ostream &out)
{
out << "Suit: "<< Suit << std::endl;
out << "Value:" << Value << std::endl;
return out;
}

或者你可以得到 operator<<包含打印逻辑并调用 operator<<来自 Print :

void Card::Print()
{
std::cout << *this;
}

std::ostream& operator<<(std::ostream &out, const Card &aCard)
{
out << "Suit: "<< Suit << std::endl;
out << "Value:" << Value << std::endl;
return out;
}

关于c++ - 使用 print 函数输出重载的 << 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14861953/

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