Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Sobota, 21 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO


Kompozyt

Przykład 1
#include <iostream>

#include "urzadzeniausb.h"

int main(void) {
	try {
		UrzadzenieUSB * klawiatura = new Klawiatura();
		Mysz * mysz = new Mysz ();
		HubUSB * hub1 = (new HubUSB(2))
			->podlaczUrzadzenie(0, klawiatura)
			->podlaczUrzadzenie(1, mysz);

		AparatFotograficzny * aparat = new AparatFotograficzny();
		HubUSB * hub2 = (new HubUSB(4))
			->podlaczUrzadzenie(0, aparat);

		Pendrive * pendrive = new Pendrive();
		DyskTwardy * dysk1 = new DyskTwardy();
		DyskTwardy * dysk2 = new DyskTwardy();
		HubUSB * hub3 = (new HubUSB(4))
			->podlaczUrzadzenie(0, hub2)
			->podlaczUrzadzenie(1, pendrive)
			->podlaczUrzadzenie(2, dysk1)
			->podlaczUrzadzenie(3, dysk2);

		HubUSB * kontroler = (new HubUSB(2))
			->podlaczUrzadzenie(0, hub1)
			->podlaczUrzadzenie(1, hub3);

		kontroler->pracuj();
	} catch (const std::exception & e) {
		std::clog << e.what() << std::endl;
	}

	return 0;
}
#ifndef __URZADZENIAUSB_H__
#define __URZADZENIAUSB_H__

#include <vector>

class UrzadzenieUSB {
public:
	UrzadzenieUSB ();
	virtual ~UrzadzenieUSB ();

	virtual void pracuj () = 0;
};

class HubUSB : public UrzadzenieUSB {
public:
	HubUSB (unsigned int liczbaPortow);
	virtual ~HubUSB ();
	void pracuj ();
	HubUSB * podlaczUrzadzenie (unsigned int port, UrzadzenieUSB * urzUSB);
	void odlaczUrzadzenie (unsigned int port);
private:
	std::vector<UrzadzenieUSB *> s_porty;
};

class Klawiatura : public UrzadzenieUSB {
public:
	Klawiatura ();
	virtual void pracuj ();
};

class Mysz : public UrzadzenieUSB {
public:
	Mysz ();
	virtual void pracuj ();
};

class DyskTwardy : public UrzadzenieUSB {
public:
	DyskTwardy ();
	virtual void pracuj ();
};

class Pendrive : public UrzadzenieUSB {
public:
	Pendrive ();
	virtual void pracuj ();
};

class AparatFotograficzny : public UrzadzenieUSB {
public:
	AparatFotograficzny ();
	virtual void pracuj ();
};

#endif
#include "urzadzeniausb.h"

#include <algorithm>
#include <iostream>

namespace {
	class ObFunUsun {
	public:
		void operator() (UrzadzenieUSB * urz) {
			delete urz;
		}
	};
}

UrzadzenieUSB::UrzadzenieUSB () {

}

UrzadzenieUSB::~UrzadzenieUSB () {

}

HubUSB::HubUSB (unsigned int liczbaPortow) 
	: s_porty(liczbaPortow, 0)
{

}

HubUSB::~HubUSB () {
	std::for_each(s_porty.begin(), s_porty.end(), ObFunUsun());
}

void HubUSB::pracuj () {
	std::clog << "Hub pracuje" << std::endl;
	
	std::vector<UrzadzenieUSB *>::iterator it;
	for (it = s_porty.begin(); it != s_porty.end(); ++it) {
		if (*it) 
			(*it)->pracuj();
	}
}

HubUSB * HubUSB::podlaczUrzadzenie (unsigned int port, UrzadzenieUSB * urzUSB) {
	s_porty.at(port) = urzUSB;
	return this;
}

void HubUSB::odlaczUrzadzenie (unsigned int port) {
	delete s_porty.at(port);
	s_porty.at(port) = 0;
}

Klawiatura::Klawiatura () {
	
}

void Klawiatura::pracuj () {
	std::clog << "Klawiatura pracuje" << std::endl;
}

Mysz::Mysz () {
	
}

void Mysz::pracuj () {
	std::clog << "Mysz pracuje" << std::endl;
}

DyskTwardy::DyskTwardy () {
	
}

void DyskTwardy::pracuj () {
	std::clog << "Dysk twardy pracuje" << std::endl;
}

Pendrive::Pendrive () {

}

void Pendrive::pracuj () {
	std::cout << "Pendrive pracuje" << std::endl;
}

AparatFotograficzny::AparatFotograficzny () {

}

void AparatFotograficzny::pracuj () {
	std::cout << "Aparat fotograficzny pracuje" << std::endl;
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11