// @topic T00750 Initializer lists and const qualifiers
// @brief 10/18/2012 -- reference as class member, using *this

class CPoint {
    // member variables
    int m_x;
    int m_y;
public:
    // constructors
	CPoint() // default ctr
		:
	m_x( 0 ), m_y( 0 )
	{
	}
	CPoint( CPoint& other ) // copy ctr
		:
		m_x( other.m_x ),
		m_y( other.m_y )
	{
		//m_x = other.m_x;
		//m_y = other.m_y;
	}
	CPoint( int xx, int yy ) // specific ctr
		:
		m_x( xx ),
		m_y( yy )
	{
		//m_x = xx;
		//m_y = yy;
	}

    // operations
	CPoint& get_reference() {
		return *this;
	}

	CPoint* get_pointer() {
		return this;
	}

    void adjust( int xx, int yy )
    {
        m_x += xx;
        m_y += yy;
    }
};//class CPoint

class CView {
	CPoint& m_pt_one;
	CPoint& m_pt_two;
public:
	CView( CPoint& pt1, CPoint& pt2 ) // no pt ctr is invoked
		:
		m_pt_one( pt1 ), // member initialization syntax
		m_pt_two( pt2 )
	{
		//m_pt_one = pt1; // cannot initialize member references in the constr body
		//m_pt_one = pt2;
	}
};//class CView

int main()
{
	CPoint pt( 5, 7 );
	pt.adjust( 100, 200 );

	CView view( pt, pt );

    // examples of standalone reference and pointer:
	CPoint& refpt = pt.get_reference();
	CPoint* ptr = pt.get_pointer();
    return 0;
}//main