我有一堂课:
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!没有改变。我做错了什么?
答案 0 :(得分:3)
您的方法get_edges_list()
返回私有成员的副本,您对此副本所做的任何更改均不会影响该成员。也许可以改为返回引用,也可以通过提供Network::set_flow_at(int flow,int index);
使用适当的封装。