• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozbudowa programu za pomocą agregacji

0 głosów
80 wizyt
pytanie zadane 21 kwietnia 2020 w C i C++ przez Hyack Nowicjusz (200 p.)

Uszanowanko!

 

Mam do dodania kilka punktów na jutrzejszy code review z wykładowcą, a mianowicie:

Rozwinąć projekt pod kątem :

1. użycia agregacji

2. zagniedżania klas (tylko w polu prywatnym)

3. użycia mechanizmu przyjaźni

4. użycia konstruktorów ( kopiującego, delegującego, domyślnego) i destruktorów

5. specyfikatora deklaracji auto

 

..., z czego zrobiłem agregację, a zagnieżdżanie klasy średnio mi działa.


O to kod:

Main.cpp

#include "pojazdy.h"
#include <iostream>

using namespace std;

int main()
{
// AGREGACJA
class Adresy
{
	public:
		string ulica, miasto, woj;
		Adresy(string ulica, string miasto, string woj)
		{
			this->ulica = ulica;
			this->miasto = miasto;
			this->woj = woj;
		}
};


class Pracownik
{
	private:
		Adresy* adresy;
	public:
		int id;
		string nazwisko;
		Pracownik(int id, string nazwisko, Adresy* adresy)
		{
			this->id = id;
			this->nazwisko = nazwisko;
			this->adresy = adresy;
		}
		void display()
		{
			cout << endl;
			cout << "ID: " << id << " || " << "Nazwisko: " << nazwisko << " || " << "Ulica: " << adresy->ulica << " || " << "Miasto: " << adresy->miasto << " || " << "Woj: " << adresy->woj << endl;
		}
};
//AGREGACJA

	Pojazdy** poj;
	Pojazdy*** p_poj = &poj;


	int size{ 0 }, index{ 0 };
	Pojazdy::Petla(poj, size);

	Pojazdy::print(poj, size);
	//Pojazdy::print(p_poj, size);

	Pojazdy::wyrejestruj(poj, size, 0);
	Pojazdy::print(poj, size);
	Pojazdy::wyrejestruj(poj, size);
	
	//zmienne agregacji 
	Adresy a1 = Adresy("Kwiatkowskiego", "Szczecin", "Zachodniopomorskie");
	Pracownik p1 = Pracownik(101, "Kowalski", &a1);
	p1.display();  //pokazanie dzialania agregacji

	Pojazdy::Spec s1;
	cout << "Wynik: " << s1.p_spec << endl;

	return 0;
}

 

Pojazdy.h

#ifndef pojazdy_h
#define pojazdy_h

#include <iostream>
#include <cstdlib>
#include "klienci.h"

using namespace std;

class Pojazdy
{
// ZAGNIEŻDŻANIE KLAS W POLU PRYWATNYM
private:
	class Spec
	{

	public:
		string typ;
		string model;
		int moc;
		int pojemnosc;
		int przyspieszenie;
		int zuzycie_p;

		void p_spec(string typ, string model, int moc, int pojemnosc, int przyspieszenie, int zuzycie_p)
		{
			cout << "Podaj specyfikacje pojazdu:" << endl;
			cin >> typ >> model >> moc >> pojemnosc >> przyspieszenie >> zuzycie_p;
			cout << "Podano specyfikacje pojazdu!" << endl;
		}
	};


public:


	string typ;
	string marka;
	string model;
	string z_dod;
	int ilosc;
	int cena;


	Pojazdy();
	~Pojazdy();

	Pojazdy(const string& Typ, const string& Marka, const string& Model, int Cena);

	//static void dodaj();
	static void d_pojazd(Pojazdy**& pojazdy, int& size, const string& Typ, const string& Marka, const string& Model, int Cena);
	static void wyrejestruj(Pojazdy**& pojazdy, int& size);
	static void wyrejestruj(Pojazdy**& pojazdy, int& size, int index);
	static void print(Pojazdy** pojazdy, int size);
	static void print(Pojazdy*** pojazdy, int size);
	static void Petla(Pojazdy**& p, int& size);

	//void wyswietl();
	int get_ilosc() { return ilosc; }
	string get_typ() { return typ; }
	string get_marka() { return marka; }
	string get_model() { return model; }
	int get_cena() { return cena; }
	void set_ilosc(int x);
};

#endif

Pojazdy.cpp (tu wszystko gra i hula, wrzucam tylko do wglądu)

#include "pojazdy.h"

#include <iostream>

using namespace std;

void Pojazdy::set_ilosc(int x) { ilosc = x; }

Pojazdy::Pojazdy() {

}
Pojazdy::~Pojazdy() {

}

Pojazdy::Pojazdy(const string& Typ, const string& Marka, const string& Model, int Cena) :  typ(Typ), marka(Marka),model(Model), cena(Cena)
{
}


void Pojazdy::Petla(Pojazdy**& p, int& size) {
	char z_dod;// = 'N';
	do {
		string typ, marka, model;
		int cena;
		cout << "DODAWANIE POJAZDU..." << endl;
		cout << "Podaj typ pojazdu:";
		cin >> typ;

		cout << "Podaj marke pojazdu: ";
		cin >> marka;

		cout << "Podaj model pojazdu: ";
		cin >> model;

		cout << "Dodaj cene pojazdu: ";
		cin >> cena;

		Pojazdy::d_pojazd(p, size, typ,marka,model,cena); //odpowiada za dodawnie
		cout << "Czy chcesz zakonczyc dodawanie? Jesli tak, wcisnij Y/N: ";
		cin >> z_dod;

	} while (z_dod == 'N' || z_dod == 'n');//while (p[size]->z_dod == "N" ||p[size]->z_dod == "n");
}

void Pojazdy::print(Pojazdy** pojazdy, int size) {
	std::cout << "====================================" << std::endl;
	for (int i{ 0 }; i < size; i++)
		std::cout << "Typ: " << pojazdy[i]->get_typ() << " Marka: " << pojazdy[i]->get_marka() << " Model: " << pojazdy[i]->get_model() << " Cena: " << pojazdy[i]->get_cena() << std::endl;
}

void Pojazdy::print(Pojazdy*** pojazdy, int size) {
	std::cout << "====================================" << std::endl;
	for (int i{ 0 }; i < size; i++)
		for(int j{0};j <4;j++)
		std::cout << "Typ: " << pojazdy[i][j]->get_typ() << " Marka: " << pojazdy[i][j]->get_marka() << " Model: " << pojazdy[i][j]->get_model() << " Cena: " << pojazdy[i][j]->get_cena() << std::endl;
}	

void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size) {
	for (size_t i{ 0 }; i < size; i++)
		delete pojazdy[i];
	delete[] pojazdy;
	size = 0;
	pojazdy = NULL;
}

void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size, int index) {
	if (index < size) {
		Pojazdy** temp = new Pojazdy * [size - 1];
		short int j{ -1 };
		for (size_t i{ 0 }; i < size; i++) {
			if (i != index) {
				j++;
				temp[j] = pojazdy[i];
			}
		}
		delete[] pojazdy;
		--size;
		pojazdy = temp;
	}
	else
		std::cout << "Pamiec zwolniona!" << std::endl;
}

void Pojazdy::d_pojazd(Pojazdy**& pojazdy, int& size, const string& Typ, const string& Marka, const string& Model, int Cena) {
	Pojazdy** temp = new Pojazdy * [size + 1];
	if (size == 0)
		temp[size] = new Pojazdy(Typ, Marka, Model, Cena);
	else {
		for (int i{ 0 }; i < size; i++)
			temp[i] = pojazdy[i];
		delete[] pojazdy;

		temp[size] = new Pojazdy(Typ,Marka,Model,Cena);
	}
	++size;
	pojazdy = temp;
}

 

Gdy w mainie próbuję wywołać Pojazdy::Spec s1 to niestety wywala mi błąd mówiący o tym, że jest w polu prywatnym i niestety nie da się z tym nic zrobić.

 

Co do reszty podpunktów, nie mam pomysłu, więc byłbym wdzięczny za jakąkolwiek pomoc - nie muszą być to wyszukane metody, a najprostsze wykorzystanie reszty podpunktów od 3-5.

 

Dzięki!

komentarz 21 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)
1. Od kiedy definujesz klasy w funkacj? Wywal je przed maina.

2. Ma to byc slaba czy mocna agregacja, czyli agegacja czy kompozycja?
komentarz 21 kwietnia 2020 przez Hyack Nowicjusz (200 p.)
Słaba agregacja, ważne by wpasowała się w kontekst całego programu.
komentarz 21 kwietnia 2020 przez DragonCoder Nałogowiec (36,500 p.)

Problemem jest to, ze probujesz sie dostac do pola prywatnego klasy. Dodaj sobie funkcj, ktora stworzy nowy obiekt klasy Spec. Zeby dostac sie do prywatnych pol jakies klasy musisz zrobic to przez funkcje, poniewaz tylko funkcje wenatrz klasy maja prawo dotknac tych danych. To jest koncepcja oop lub encapsulation

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 135 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,280 p.)
+1 głos
2 odpowiedzi 275 wizyt
pytanie zadane 7 czerwca 2017 w C i C++ przez mel0n Początkujący (400 p.)
0 głosów
2 odpowiedzi 511 wizyt
pytanie zadane 26 sierpnia 2017 w C i C++ przez minemoney Nowicjusz (240 p.)

88,325 zapytań

136,919 odpowiedzi

305,555 komentarzy

58,598 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...