Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Środa, 18 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 5
#include <iostream>

#include "urzadzeniausb.h"

int main(void) {
	try {
		UrzadzenieUSB * kontroler = new HubUSB(4);

		(*kontroler)
			<< (*new HubUSB(4))
			<< (*new DyskTwardy())
			<< (*new DyskTwardy());

		(*kontroler)[0]
			<< (*new Klawiatura())
			<< (*new Mysz())
			<< (*new Pendrive())
			<< (*new HubUSB(2));

		(*kontroler)[0][3]
			<< (*new AparatFotograficzny());

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

	return 0;
}
#include "urzadzeniausb.h"

#include <algorithm>
#include <iostream>

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

UrzadzenieUSB::UrzadzenieUSB () 
{

}

UrzadzenieUSB::~UrzadzenieUSB () {

}

HubUSB * UrzadzenieUSB::podlaczUrzadzenie (unsigned int port, UrzadzenieUSB * urzUSB) {
	throw std::exception("Nie mozna podlaczac urzadzen");
}

UrzadzenieUSB * UrzadzenieUSB::odlaczUrzadzenie (unsigned int port) {
	throw std::exception("Nie mozna odlaczac urzadzen");
}

UrzadzenieUSB * UrzadzenieUSB::port (unsigned int aPort) {
	throw std::exception("Nie mozna zwrocic uzadzenia z portu");
}

unsigned int UrzadzenieUSB::liczbaPortow () const {
	return 0;
}

UrzadzenieUSB & UrzadzenieUSB::operator<< (UrzadzenieUSB & urzUSB) {
	for (unsigned int i = 0; i < liczbaPortow(); ++i) {
		if (port(i))
			continue;
		else
			return *podlaczUrzadzenie(i, &urzUSB);
	}
	throw std::exception("Nie ma wolnego portu.");
}
	
UrzadzenieUSB & UrzadzenieUSB::operator[] (unsigned int i) {
	return *port(i);
}

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;
}

UrzadzenieUSB * HubUSB::odlaczUrzadzenie (unsigned int port) {
	UrzadzenieUSB * temp = s_porty.at(port);
	s_porty.at(port) = 0;
	return temp;
}

UrzadzenieUSB * HubUSB::port (unsigned int aPort) {
	return s_porty.at(aPort);
}

unsigned int HubUSB::liczbaPortow () const {
	return s_porty.size();
}

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::clog << "Pendrive pracuje" << std::endl;
}

AparatFotograficzny::AparatFotograficzny () {

}

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