// strngbad.cpp -- metody třídy StringBad
#include <cstring> 		// někdy také string.h
#include "strngbad.h"
using std::cout;

// inicializace statické poloky třídy
int StringBad::num_strings = 0;

// metody třídy

// konstrukce StringBad z řetzce typu C 
StringBad::StringBad(const char * s)
{
	len = std::strlen(s); 					// nastaví velikost
	str = new char[len + 1]; 				// přidělí pamě
	std::strcpy(str, s); 						// inicializuje ukazatel
	num_strings++; 								// nastaví čítač objektů
	cout << num_strings << ": \"" << str
			<< "\" object created\n"; 	// Informace pro obsluhu
}

StringBad::StringBad() // implicitní konstruktor
{
	len = 4;
	str = new char[4];
	std::strcpy(str, "C++"); 									// implicitní řetězec
	num_strings++;
	cout << num_strings << ": \"" << str
			<< "\" implicitni objekt vytvoren\n"; 	// FYI
}

StringBad::~StringBad() 										// nutný destruktor
{
	cout << "\"" << str << "\"objekt zrusen, "; 	// FYI
	--num_strings; 													// nutné
	cout << num_strings << " left\n"; 					// FYI
	delete [] str; 													// nutné
}

std::ostream & operator<<(std::ostream & os, const StringBad & st)
{
	os << st.str;
	return os;
}
