Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 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 1
#include "generator.h"
#include <iostream>
#include <numeric>

int main () {
	Generator * wsk = Generator::egzemplarz();

	for (unsigned int i = 0; i < 10; ++i)
		std::clog << wsk->losuj(1.0) << std::endl;

	return 0;
}
#ifndef __GENERATOR_H__
#define __GENERATOR_H__
#include <vector>

#define GENERATOR_TAB 1000

class Generator {
public:
	static Generator * egzemplarz ();
	double losuj(double wariancja);
private:
	Generator ();

	void wygeneruj ();

	std::vector<double> s_tab;
	unsigned int s_i;
	static Generator * s_egzemplarz;
};

#endif
#include "generator.h"
#include <algorithm>
#include <numeric>
#include <iterator>
#include <ctime>
#include <cmath>

namespace {
	class GenObiekt {
	public:
		GenObiekt () {
			std::srand(static_cast<unsigned int> (std::time(0)));
		}
		double operator() () {
			std::vector<double> losy;

			for (unsigned int i = 0; i < 12; ++i) {
				unsigned int los = std::rand();
				losy.push_back((los % 1000) / 1000.0);
			}

			return std::accumulate(losy.begin(), losy.end(), 0.0) - 6;
		}
	};
}

Generator * Generator::egzemplarz () {
	if (s_egzemplarz == 0)
		s_egzemplarz = new Generator();

	return s_egzemplarz;
}

double Generator::losuj(double wariancja) {
	return s_tab[s_i++] * std::sqrt(wariancja);

	if (s_i == s_tab.size()) {
		s_i = 0;
		std::random_shuffle(s_tab.begin(), s_tab.end());
	}
}

Generator::Generator () : s_i(0) {
	wygeneruj ();
}

void Generator::wygeneruj () {
	std::generate_n(std::back_inserter(s_tab), GENERATOR_TAB, GenObiekt());
}

Generator * Generator::s_egzemplarz = 0;
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11