#include <iostream.h>
class Point
{
public:
Point (int x, int y):myX(x), myY(y) {}
~Point(){}
int GetX() const { return myX; }
void SetX(int x) { myX = x; }
int GetY() const { return myY; }
void SetY(int y) { myY = y; }
private:
int myX;
int myY;
};
class Rectangle
{
public:
Rectangle(Point upperLeft, Point lowerRight):
myUpperLeft ( new Point(upperLeft)),
myLowerRight(new Point(lowerRight))
{}
Rectangle(int upperLeftX, int upperLeftY, int lowerRightX, int lowerRightY):
myUpperLeft(new Point(upperLeftX,upperLeftY)),
myLowerRight(new Point(lowerRightX,lowerRightY))
{}
Rectangle( const Rectangle & rhs ):
myUpperLeft(rhs.myUpperLeft),
myLowerRight(rhs.myLowerRight)
{
cout << "In Rectangle's copy constructor...\n";
}
~Rectangle(){ cout << "\nIn destructor..." << endl; delete myUpperLeft; delete myLowerRight; }
int GetWidth() { return myLowerRight->GetX() - myUpperLeft->GetX(); }
int GetHeight() { return myLowerRight->GetY() - myUpperLeft->GetY(); }
// private:
Point * myUpperLeft;
Point * myLowerRight;
};
void SomeFunction( Rectangle );
int main()
{
Point ul(0,0);
Point lw(20,30);
Rectangle myRect(ul,lw);
cout << "myRect measures ";
cout << myRect.GetWidth();
cout << " by " << myRect.GetHeight() << endl;
cout << "myRect address: " << &myRect << endl;
cout << "myRect->myUpperLeft: " << myRect.myUpperLeft << endl;
cout << "&myRect.myUpperLeft: " << &myRect.myUpperLeft << endl;
SomeFunction(myRect);
cout << "Back from SomeFunction";
return 0;
}
void SomeFunction ( Rectangle r )
{
cout << "r measures ";
cout << r.GetWidth();
cout << " by " << r.GetHeight() << endl;
cout << "r address: " << &r << endl;
cout << "r->myUpperLeft: " << r.myUpperLeft << endl;
cout << "&r.myUpperLeft: " << &r.myUpperLeft << endl;
cout << "Returning from SomeFunction!";
}