Haszowanie
Ostatnio zmodyfikowano 2014-06-19 18:59
Nowicjusz Temat założony przez niniejszego użytkownika |
Haszowanie » 2014-06-18 21:17:11 Cześć, musze napisać program który haszuje zarówno inty jak i stringi dwiema metodami, dodatkowo program musi zawierac metody insert,search i remove. Chciałbym to napisać poprawnie programistycznie, a zatem gdyby obsluga programu wygladala taj jak ponizej, to byloby dobrze? vector < int > dane = getDane();
Hashing < int > * hash = new Metoda1 < int >( dane );
hash.insert( 3333 ); hash.remove( 11 ); hash.search( 44 );
Oraz czy daloby sie zrobic, aby metody insert, remove oraz search byly zdefiniowane tylko raz? Nie chcialbym ich przeladowywac, poniewaz jedyna zmiana jaka zachodzi w tych metodach to, wykonywana jest w nich albo metoda z klasy Metoda1 albo z klasy Metoda2, a same metody(remove search insert) sa dosc obszerne. |
|
Jacob99 |
» 2014-06-18 21:26:10 Metoda1 i metoda2 bardzo się różnią?
|
|
Nowicjusz Temat założony przez niniejszego użytkownika |
» 2014-06-18 22:13:18 metody w klasach Metoda1 i Metoda2 zwracaja rozne wartosci int i tyle. Calosc dla zaluzmy metody remove powinna wygladac mniej wiecej tak(narazie bez szablonow): Class Hashing { public: void remove( int value ); }
void Hashing::remove( int value ) { if( Metoda1 )...; else if( Metoda2 )...; }
W sumie juz na starcie mam problem bo jezeli chce aby inicjalizacja obiektu klasy Hashing wygladala w taki sposob(mam nadzieje ze to poprawnie napisalem): Hashing * k = new Metoda1();
To Metoda1 musi dziedziczyc po klasie Hashing, a jezeli tak zrobie to nie mam wtedy odwolania do metody klasy Metoda1, no chyba ze zrobie wlasnie wsklaznik w klasie Hashing na Metoda1. Co o tym sadzicie ? |
|
libed |
» 2014-06-18 23:57:54 Stwórz klasę Hash, która w konstruktorze będzie przyjmować int/enum determinujący metodę haszowania. |
|
Monika90 |
» 2014-06-19 07:37:27 zrób tak jak w bibliotece standardowej lub podobnie: template < class Key, class Hash > class HashSet { public: void insert( const Key & ); void remove( const Key & ); bool search( const Key & ) const; private: Hash hash_; };
template < class Key > struct Method1 { int operator ()( const Key & ) const { return 666; } };
template < class Key > struct Method2 { };
int main() { HashSet < int, Method1 < int >> set1; }
|
|
Nowicjusz Temat założony przez niniejszego użytkownika |
» 2014-06-19 14:23:16 dzieki Monika ciekawe rozwiazanie, ale czy daloby sie wyeliminowac przypadek gdyby ktos chcial sobie uzyc jednoczesnie dwoch roznych typow ?
P.S wczoraj znajomy zasugerowal mi abym zrobil w klasie Hash metode wirtualna i w zaleznosci od tego czy rzutowalbym(dobrze napisalem?) na klase Metoda1 czy Metoda2, wykonywalaby sie odpowiednia metoda. |
|
pekfos |
» 2014-06-19 18:23:56 i w zaleznosci od tego czy rzutowalbym(dobrze napisalem?) na klase Metoda1 czy Metoda2, wykonywalaby sie odpowiednia metoda. |
To tak nie działa. |
|
Nowicjusz Temat założony przez niniejszego użytkownika |
» 2014-06-19 18:55:55 Dobra zrobie to tak jak Monika napisala bo w konstruktorze i tak sie wykonuje metoda klasy bazowej czyli wirtualna. |
|
« 1 » 2 |