//: C06:Constructor1.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Constructors & destructors
#include <iostream>
using namespace std;

class Tree
{

int height;
public:

/* Constructor */
Tree(int initialHeight); 
/* Destructor */
~Tree(); 
void grow(int years);
void printsize();

};

Tree::Tree(int initialHeight)
{

height = initialHeight;
cout << "inside Tree constructor (" << height << ")" << endl;

}

Tree::~Tree()
{

cout << "inside Tree destructor (" << height << ")" << endl;

}

void Tree::grow(int years)
{

height += years;

}

void Tree::printsize()
{

cout << "Tree height is " << height << endl;

}

int main()
{

cout << "before opening brace" << endl;
{

cout << "after opening brace" << endl;
Tree t(12);
cout << "after Tree creation" << endl;
t.printsize();
t.grow(4);
cout << "before closing brace" << endl;

}

/* A questo punto, essendo fuori dello "scope" del costruttore,l'oggetto viene "distrutto", ovvero liberata la memoria precedentemente assegnatagli.
N.B.
Abbiamo visto che (per quanto riguanda lo scope) è megliore ridurre al minimo l'ambito di validità di una variabile */

cout << "after closing brace" << endl;

} ///:~