我有两个类,在示例中添加了Rectangle和Rectangles。目标是使一个Rectangles对象保存对多个Rectangle对象的引用。如何在C++中的类之间保持多个引用?
如果我更改r
r.set_values(4,4)
然后关闭粗r.area()
被更改。但是,如果我拨打rectangles.rects[0].area()
,它仍然是12,因此不会更改。
据我所知,我在rectangles
的r
的参考,但是这似乎是错误的。
如何实现这一目标?
的代码可以here
#include <iostream>
using namespace std;
class Rectangle {
int width, height;
public:
void set_values (int,int);
int area() {return width*height;}
};
void Rectangle::set_values (int x, int y) {
width = x;
height = y;
}
class Rectangles {
public:
Rectangles(int n);
void addRectangle(Rectangle* r);
Rectangle* rects;
int nRects;
};
Rectangles::Rectangles(int n) {
rects = new Rectangle[n];
nRects = 0;
}
void Rectangles::addRectangle(Rectangle* r) {
rects[nRects] = *r;
nRects++;
}
int main() {
Rectangle r;
Rectangles rectangles(5);
r.set_values(4,3);
rectangles.addRectangle(&r);
cout<<"r.area() before change:"<<r.area()<<endl;
cout<<"rectangles.rects[0].area() before change:"<<rectangles.rects[0].area()<<endl;
r.set_values(4,4);
cout<<"r.area() after change:"<<r.area()<<endl;
cout<<"rectangles.rects[0].area() after change:"<<rectangles.rects[0].area()<<endl;
return 0;
}
输出:
r.area() before change:12
rectangles.rects[0].area() before change:12
r.area() after change:16
rectangles.rects[0].area() after change:12
没有寿命,你是不是保持在基准'Rectangles',你*复制'Rectangle'对象。如果你想要一个引用集合,我建议你阅读['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)和['std :: shared_ptr']( http://en.cppreference.com/w/cpp/memory/shared_ptr)。 – 2014-09-03 08:52:04
@JoachimPileborg好的,我应该如何改变这段代码,让我保持引用? – Nick 2014-09-03 08:54:01