Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 23 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


Singleton

Przykład 2
#include "zasob.h"
#include <exception>
#include <iostream>

int main () {
	Zasob *z1 = 0;
	Zasob *z2 = 0;
	Zasob *z3 = 0;
	Zasob *z4 = 0;

	try {
		z1 = Zasob::pobierzZasob();			// pobrieranie zasobow
		z1->uzyjZasob();
		z2 = Zasob::pobierzZasob();
		z2->uzyjZasob();
		z3 = Zasob::pobierzZasob();
		z3->uzyjZasob();
		z4 = Zasob::pobierzZasob();			// nie ma juz wolnego zasobu, rzucony wyjatek
	} catch (const std::exception & e) {
		std::clog << e.what() << std::endl;
	}
	try {
		delete z3; z3 = 0;					// zwolnienie zasobu przez z3
		z4 = Zasob::pobierzZasob();			// z4 moze pobrac nowy zasob, poniewaz z3 go zwolnil
		z3 = Zasob::pobierzZasob();			// z3 nie moze ponownie pobrac zasobu, poniewaz pobral go z4 - wyjatek
	} catch (const std::exception & e) {
		std::clog << e.what() << std::endl;
	}

	return 0;
}
#ifndef __ZASOB_H__
#define __ZASOB_H__

class Zasob {
public:
	static Zasob * pobierzZasob ();
	void uzyjZasob ();
	~Zasob();
private:
	Zasob ();
	Zasob (const Zasob & z);
	static unsigned int DOSTEPNYCHZASOBOW;
};

#endif
#include "zasob.h"
#include <iostream>
#include <exception>

Zasob * Zasob::pobierzZasob () {
	if (DOSTEPNYCHZASOBOW > 0) {
		--DOSTEPNYCHZASOBOW;
		return new Zasob();
	} else {
		throw std::exception("WYJATEK - Nie ma wolnego zasobu");
	}
}

Zasob::~Zasob() {
	++DOSTEPNYCHZASOBOW;
	std::clog << "Zwrocenie zasobu" << std::endl;
}
	
void Zasob::uzyjZasob () {
	std::clog << "Uzycie zasobu." << std::endl;
}

Zasob::Zasob () {
	std::clog << "Tworzenie zasobu." << std::endl;
}

unsigned int Zasob::DOSTEPNYCHZASOBOW = 3;
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11