我有一个类:
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/