c++ - 类对象的参数没有改变

标签 c++

我有一个类:

class Edges
{
protected:
    int capacity;
    int flow;
public:
    void set_capacity(int capacity);
    void set_flow(int flow);
    int get_capacity();
    int get_flow();
 }

 void Edges::set_capacity(int capacity) { Edges::capacity = capacity; }
 void Edges::set_flow(int flow) { Edges::flow = flow; }
 int Edges::get_capacity() { return capacity; }
 int Edges::get_flow() { return flow; }

我有一个类:

class Network
{
protected:
    vector<Edges> edges_list;
public:
    void add_edge(int capacity, int flow);
    vector<Edges> get_edges_list() { return edges_list; }
 }

 void Network::add_edge(int capacity, int flow) {
     Edges temp;
     temp.set_capacity(capacity);
     temp.set_flow(flow);
     edges_list.pushback(temp);
 }

接下来我这样做:

Network net;
net.add_edge(100, 500);
cout << net.get_edges_list()[0].get_flow() << endl; // I see 500 

一切都很好,如果我在添加边后使用 get_capacity()get_flow() 我会得到我想要的(我现在设置的容量或流量) ). 但如果我这样做:

net.get_edges_list()[0].set_flow(777);
cout << net.get_edges_list()[0].get_flow() << endl; // I see 500 again! 

又看到500了!没有改变。我做错了什么?

最佳答案

您的方法 get_edges_list() 返回私有(private)成员的拷贝,您对此拷贝所做的任何更改都不会影响该成员。也许返回一个引用,或者通过提供 Network::set_flow_at(int flow,int index); 来使用适当的封装。

关于c++ - 类对象的参数没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51614415/

相关文章:

c++ - 如何在C++中将句子[i](字符串)分成单词(字符串)

c++ - 我需要在共享内存对象上使用 shm_unlink 吗?

c++ - 如何自定义wxApp实现协议(protocol)?

c++ - 错误 : C++ requires a type specifier for all declarations?

c++ - 重定向打开的 TCP 连接

c++ - 顶点缓冲区对象中的颜色 - DirectX 与 OpenGL

c++ - 简单数组排序/检查 + 分而治之版本

c++ - 如何在大量无损压缩图像中提取重复图像对(完全相同)?如何 std::hash 在内存中?

c++ - 在哪种情况下,std::map 中的插入会失败?

c++ - 可以返回引用吗?