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

Rozbudowa programu za pomocą agregacji

Object Storage Arubacloud
0 głosów
146 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 482 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
+1 głos
2 odpowiedzi 465 wizyt
pytanie zadane 7 czerwca 2017 w C i C++ przez mel0n Początkujący (400 p.)
0 głosów
2 odpowiedzi 866 wizyt
pytanie zadane 26 sierpnia 2017 w C i C++ przez minemoney Nowicjusz (240 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...