>"-6ren"> >"-嘿,我创建了一个名为“Node”的抽象类和实现 Node 类的 NodeBlock 类。在我的主类中,我需要打印 NodeBlock 中的值,这是我的一些主类代码: //receving the f-6ren">
gpt4 book ai didi

c++ - 字符串重载运算符 ">>"

转载 作者:行者123 更新时间:2023-11-28 05:24:42 36 4
gpt4 key购买 nike

嘿,我创建了一个名为“Node”的抽象类和实现 Node 类的 NodeBlock 类。在我的主类中,我需要打印 NodeBlock 中的值,这是我的一些主类代码:

 //receving the fasteset route using the BFS algorithm.
std::stack<Node *> fast = bfs.breadthFirstSearch(start, goal);

/*print the route*/
while (!fast.empty()) {
cout << fast.top() << endl;
fast.pop();
}

节点:

#include <vector>
#include "Point.h"
#include <string>

using namespace std;

/**
* An abstract class that represent Node/Vertex of a graph the node
* has functionality that let use him for calculating route print the
* value it holds. etc..
*/
class Node {
protected:
vector<Node*> children;
bool visited;
Node* father;
int distance;

public:
/**
* prints the value that the node holds.
*/
virtual string printValue() const = 0;

/**
* overloading method.
*/
virtual string operator<<(const Node *node) const {
return printValue();
};

};

节点 block .h:

    #ifndef ADPROG1_1_NODEBLOCK_H
#define ADPROG1_1_NODEBLOCK_H

#include "Node.h"
#include "Point.h"
#include <string>


/**
*
*/
class NodeBlock : public Node {
private:
Point point;

public:
/**
* prints the vaule that the node holds.
*/
ostream printValue() const override ;
};
#endif //ADPROG1_1_NODEBLOCK_H

节点 block .cpp:

    #include "NodeBlock.h"
using namespace std;



NodeBlock::NodeBlock(Point point) : point(point) {}

string NodeBlock::printValue() const {
return "(" + to_string(point.getX()) + ", " + to_string(point.getY());
}

我删除了那些类中所有不必要的方法。现在我试图重载 << 运算符,所以当我从堆栈中 top.() 时,它会将它分配给“cout”,它将打印点的字符串。

但我当前的输出是:0x24f70e00x24f71300x24f71800x24f73400x24f7500

如您所知,这是地址。谢谢你的帮助

最佳答案

您正在寻找的是 <<具有 ostream 的运算符在左边和一个Node在右侧,并评估为相同的 ostream .因此,它应该像这样定义(在 Node 类之外):

std::ostream& operator<<(std::ostream& out, const Node& node) {
out << node.printValue();
return out;
}

然后你需要确保你是cout ing Node , 不是 Node* :

cout << *fast.top() << endl; // dereference the pointer

关于c++ - 字符串重载运算符 ">>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794725/

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