Czy możliwe jest nadanie każdemu z obiektów numeru seryjnego inaczej, niż wprowadzając ręcznie w parametrach funkcji?
Ostatnio zmodyfikowano 2018-04-15 12:25
ozjaszka1 Temat założony przez niniejszego użytkownika |
Czy możliwe jest nadanie każdemu z obiektów numeru seryjnego inaczej, niż wprowadzając ręcznie w parametrach funkcji? » 2018-04-14 15:10:38 Hej, chodzi mi konkretnie o coś w stylu obiekt 1 - numer 0001 obiekt 2 - numer 0002 ... obiekt n - numer n
Dopiero się uczę programowania obiektowego, może spróbować stworzyć jakąś bazę danych i z niej pobierać kolejne numery dla tworzonych obiektów? |
|
jankowalski25 |
» 2018-04-14 15:23:44 Tak, da się. Przykład: 1. Utwórz w klasie zmienną statyczną i przypisz jej wartość, którą ma uzyskać pierwszy utworzony obiekt. 2. Utwórz w klasie zwykłe pole tego samego typu. 3. Napisz konstruktor, który przypisze do pola odpowiednią wartość i przestawi zmienną statyczną na kolejną dopuszczalną wartość dla następnego obiektu. |
|
mokrowski |
» 2018-04-14 16:40:24 Naturalnym i unikalnym numerem seryjnym jest adres obiektu. Jeśli jednak chcesz mieć numery sekwencyjne lub teraz lub w przyszłości serializować dane i na podstawie numeru seryjnego je odtwarzać, lepiej jest zrobić zmienną statyczną. Jeszcze innym pomysłem jest funkcja std::hash ale doczytaj jak i po co została stworzona. |
|
DejaVu |
» 2018-04-15 09:58:20 Funkcje hashujace maja kolizje wiec odpada. |
|
RazzorFlame |
» 2018-04-15 12:25:25 Jeśli obiektów może być naprawdę dużo, to warto skorzystać z liczby całkowitej (bez znaku) z największą dostępną liczbą bitów. Możesz to sobie zagwarantować, jeśli skorzystasz z std::uintmax_t , dołączając plik cinttypes. Przykładowe użycie może wyglądać tak: #include <iostream> #include <cinttypes>
class Foo { public: using HandleType = std::uintmax_t; Foo() : m_handle( nextUniqueHandle() ) { } HandleType getHandle() const { return m_handle; } private: HandleType m_handle; static HandleType nextUniqueHandle() { static HandleType currentHandle = 0; return currentHandle++; } };
int main() { for( int i = 0; i < 15; i++ ) { Foo foo; std::cout << "foo.getHandle(): " << foo.getHandle() << std::endl; } }
|
|
« 1 » |