我有兩個類,在示例中添加了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