类对象的参数不变

时间:2018-07-31 13:22:03

标签: 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!没有改变。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您的方法get_edges_list()返回私有成员的副本,您对此副本所做的任何更改均不会影响该成员。也许可以改为返回引用,也可以通过提供Network::set_flow_at(int flow,int index);使用适当的封装。