class Point
{
public:
Point(int _x,int _y):x(_x),y(_y){}
void setX(int _x){x = _x;}
void setY(int _y){y = _y;}
private:
int x,y;
};
class RectData
{
public:
RectData(Point _ulhc,Point _lrhc):ulhc(_ulhc),lrhc(_lrhc){}
Point ulhc,lrhc;
};
class Rectangle
{
public:
Rectangle(Point ul,Point lr):
pData(new RectData(ul,lr)){}
Point& upperLeft()const{return pData -> ulhc;}
Point& lowerRight()const{return pData -> lrhc;}
private:
shared_ptr<RectData>pData;
};
int main()
{
const Rectangle rec(Point(0,0),Point(1,1));
rec.lowerRight().setX(1);
}
const Point& upperLeft()const{return pData -> ulhc;}
const Point& lowerRight()const{return pData -> lrhc;}
//这样返回引用就改不了了