gpt4 book ai didi

c++ - 如何在不违反封装的情况下合法访问和修改私有(private)字段 vector 和 map?

转载 作者:行者123 更新时间:2023-11-30 05:27:30 26 4
gpt4 key购买 nike

我正在尝试将深度优先搜索实现为一个接受图形并输出 DFS 的函数。

class Graph
{
private:
int V;
int timestamp;
std:: vector<std:: list<int> > graph;
std:: map<int, vertex> nodemap;
public:
Graph(int V);
int Size();

void addEdge(int u, int v);
void printEdges();
void printVertices();
};

上面是我为图表制作的类(class)。我正在尝试创建一个返回指向 private vector 和 map 的指针的函数,以便我可以对邻接列表和 Map 数据结构执行 for 循环 操作图。但是,我知道直接操作数据结构是违反封装的,我想维护我的程序的面向对象原则。这怎么可能在不违反封装的情况下这样做呢?

PS:我不希望使用 friend 函数,因为我不想让该函数成为异常(exception)。我想找到一个主流的解决方案,它被程序员普遍使用并且是一个有纪律的解决方案。不过,如果需要,我可以更改我的类(class)字段/可访问性。

感谢您的宝贵时间!

最佳答案

您应该决定自己是否“面向对象”。如果没有,那么您刚刚获得了一个结构(又名记录),因此请公开您的字段并开始聚会。但是,如果您是 O-O,则有几种方法可供选择。您可以在 Graph 上提供访问器,例如,给定顶点返回边(或相邻顶点)的访问器。然后你在图的外部编写你的遍历算法。或者,您可以将遍历算法作为 Graph 的方法提供,它可以直接访问私有(private)成员。

关于c++ - 如何在不违反封装的情况下合法访问和修改私有(private)字段 vector 和 map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288163/

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