[C++] Dynamicke pole objektov

Programovacie jazyky, rady, poradňa...
sejnt
Amateur
Amateur
Príspevky: 11
Registrovaný: 15 nov 2009, 13:39
Bydlisko: Vysoka nad Kysucou

[C++] Dynamicke pole objektov

Príspevok od používateľa sejnt »

Zdravim , takze mam dve triedy ( nie je pouzita ani dedicnost, ani nie su vnorene) : Vozidlo a Parkovisko. Objekt vozidlo bude obsahovat farbu , znacku a typ(nakladne alebo osobne ) to vsetko mam. V triede parkovisko mam vytovrit pole objektov typu vozidlo, Velkost pola si zadam , A metody zaparkuj a odparkuj ktore zaparkuju/odparkuju objekt na zadane miesto zatial mam toto (chyby mi to hadze ked chcem priradit objekt na nejake miesto ,alebo ked chcem priradit NULL dik za pomoc) PS: nemozem pouzit STL <vector>.

Kód: Vybrať všetko


#include<iostream>
#include<string>
#include<new>

using namespace std;

class Vozidlo {
     private :
		 string Znacka;
		 string Farba;
		 char Typ;
     public :
		 Vozidlo();
		 Vozidlo(string , string, char);
		 ~Vozidlo();
	     
		 string getZnacka();
		 string getFarba();
		 char getTyp();
		 string getTyp1(char);
		
};

class Parkovisko
{
private:
	
	Vozidlo* Parkovanie;

public:
//	Parkovisko() = 0;
	Parkovisko( int);
	~Parkovisko();
	void Zaparkuj(Vozidlo, int);
	void Odparkuj(Vozidlo, int);
	void getInfo(Vozidlo, int);

	int PocetFree(Vozidlo, int);
	bool isFree(Vozidlo, int);

	
};
// DEfinicie metod ------------------------------


Parkovisko::Parkovisko(int velkost)
{
	Parkovanie = new Vozidlo[velkost];
	for (int i=0; i < velkost; i++)// nastavovanie hodnot pola
		Parkovanie[i] = NULL;
}

Vozidlo::Vozidlo(string znacka, string farba, char typ)
{
	Znacka = znacka;
	Farba = farba;
	Typ = typ;
}
void Parkovisko::Zaparkuj(Vozidlo vehicle, int miesto)
{
	if (vehicle.getTyp() == 'o')// Osobne auto zabarie 1 miesto
		Parkovanie[miesto] = vehicle;
	if (vehicle.getTyp() == 'n')// nakladne zaberie 2 miesta
	{
		Parkovanie[miesto] = vehicle;
		Parkovanie[miesto+1] = vehicle;
	};
}
// Odparkovanie aut
void Parkovisko::Odparkuj(Vozidlo vehicle, int miesto)
{
	
	if (vehicle.getTyp() == 'o')
		Parkovanie[miesto] = NULL;
	if (vehicle.getTyp() == 'n')
	{
		Parkovanie[miesto] = NULL;
		Parkovanie[miesto+1] = NULL;
	};
}
//Zistovanie poctu volnych miest
int Parkovisko::PocetFree(Vozidlo vehicle, int velkost)
{
	short pocet = 0;
	for( int i = 0; i < velkost; i++)
		if (Parkovanie[i] == vehicle)
			pocet++;
	return pocet;
}
//Zistovanie volneho miesta
bool Parkovisko::isFree(Vozidlo vehicle, int miesto)
{
	if (Parkovanie[miesto] == vehicle)
		return true;
	else
		return false;

}
inline string Vozidlo::getFarba()
{
	 return Farba;
}

inline string Vozidlo::getZnacka()
{
	return Znacka;
}
// Vypise informacie o aute na urcitom mieste 
/*void  Parkovisko::getInfo(Vozidlo vehicle, int miesto)
{
	cout << "farba " << getFarba() << endl;
	cout << "znacka " << getZnacka() << endl;
	cout << "typ " << getTyp1(typ) << endl;

	
}
*/
inline char Vozidlo::getTyp()
{
	return Typ;
}
string Vozidlo::getTyp1(char typ)
{
	if (typ == 'o')
		return "osobne";
	else
		return "nakladne";
}
//Destruktory------------------------------------------------
Vozidlo::~Vozidlo()
{}

Parkovisko::~Parkovisko()
{
	delete [] Parkovanie;
}
//---------------------------------------------------------------------
int main()
{
	string farba, znacka;
	char typ;
	int velkost, miesto;
	cout << "program simuluje parkovisko\n";
	cout <<"Zadaj kapacitu parkoviska\n";
	cin >> velkost;
	int p = 0; 
	do {
		cout << "Zadaj frabu auta | pre ukonecnie zadavania zadaj 0\n";
	    cin >> farba;
		if (farba == "0")// pre ukoncenie zadavania
			break;
	    cout << "Zadaj SPZ auta \n";
	    cin >> znacka;
	    cout << " zadaj typ auta Osobne = o / Nakladne = n\n";
	    cin >> typ;
		cout <<"zadaj miesto parkovania " << endl;
		cin >> miesto;
		Vozidlo Auto(znacka, farba, typ);
	    Parkovisko parkovisko(velkost);
        //podmienka , aby sa neparkovalo na obsadene miesto 
		if (Auto.getTyp() == 'o'){// pre osobne 
			if (parkovisko.isFree(Auto, miesto))
				parkovisko.Zaparkuj(Auto, miesto);
			else if (parkovisko.isFree(Auto, miesto) && parkovisko.isFree(Auto, miesto+1))// nakladne kontroluje dve miesta
				parkovisko.Zaparkuj(Auto, miesto);
			}
		else{
			cout << "miesto je obsadene  a stoji tam" << endl;
			//Parkovisko.getInfo();
			continue;
		    }
		//pre spravnost ukoncovacej podmienky
		if (typ == 'o')//pre osobne
			p++;
		if (typ == 'n')// pre nakladne 
			p += 2;		
		cout << "pocet volnych miest : "<< parkovisko.PocetFree(Auto, velkost) << endl;
	} while (p != velkost);
    return 0;
}


Napísať odpoveď