/*
 * @topic T0M151 C++ crash course sample 05
 * @brief Demonstrates C++ pointers, references, address-of, and arrays of objects
*/

#include <iostream>
#include "utility.h"
#include "window.h"

Frame* create_window()
{
	return new Frame( 10, 20 );
}

// makes copy of the object (bad!!)
/*
void resize_window( Frame frame )
{
	frame.resize();
}
*/
// access the object indirecty by reference
void resize_window( Frame& frame )
{
	frame.resize();
}
// access the object indirecty by pointer
void resize_window( Frame* frame/*, int count*/ )
{
	(*frame).resize(); // using pointer deref operator
	frame->resize(); // using pointer-to-memb deref operator
	//++frame;
}
int main()
{
	Frame main_window;
	resize_window( &main_window );

	Frame* ptr_win = &main_window;
	resize_window( main_window );
	resize_window( ptr_win );
	resize_window( *ptr_win );

	Frame frames[100]; // array of objects
	frames[55].display();
	resize_window( frames[55] );
	resize_window( &frames[55] );

	Frame* ptr_frames[100]; // array of pointers to objects
	for ( int idx = 0; idx < 100; ++idx ) {
		ptr_frames[idx] = new Frame( idx, idx );
	}

	int dummy = 0;
	//Window window( 10, 20 );
	Window* window = create_window();
	// because window is a pointer to object
	// we use -> pointer-to-member dereference operator
	window->display();

	pause();
	return 0;
}