Diskuze: Sháním C++ programátora
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 50 zpráv z 64.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Já momentálně mam dost svojí práce ale kdyby sem hodil to zadání tak bych to možná v delšim časovym horizontu udělal i zadarmo, záleží na náročnosti. Každopádně to udělam buť zadarmo a nebo vůbec, když se neznáme tak vymáhat z něj peníze by stejně byl asi problém.
Zadání je docela dlouhé mám ho v pdf a wordu. Zaplácnout ho sem celý jako text se mi nechce.
Nejvíce mi vyhovuje Dropbox http://www.itnetwork.cz/…leni-souboru Pokud chci něco
sdílet jednoduše si to označím a zvolím sdílet - vygeneruje se mi odkaz a
ten pak pošlu. Umí zpracovávat jak Office formáty, tak i syntaxi
nejrůznějších programovacích jazyků.
Dá se také použít místní úložiště: http://www.itnetwork.cz/dev-lighter
Tak tady posílám pdf zadání.
https://dl.dropbox.com/…5170/ZS1.pdf
https://dl.dropbox.com/…5170/ZS2.pdf
Chápu správně že:
Tu třídu Zlomek by bylo dobrý sem dát jako zdroják, obávam se že bez ní to napsat nepude.
Tady je co jsem ji vytvářel. Měla by bejt ok.
http://www.itnetwork.cz/dev-lighter/36
Ta třída nemá žádný funkce pro zjištění čitatele a jmenovatele který sou private, počítam že nebude vadit když si je tam přidělam? Nebo to můžu vyřešit přes zpřátelení anebo udělat čitatele a jmenovatele public.
Mimochodem, v C++ se funkce definujou mimo blok třídy a nebo se píšou na
jeden řádek.
Funkce se píší mimo třídy ve všech jazycích. Bez ohledu na to, zda jsou nebo nejsou na jeden řádek.
Asi bych tam žádné gettery čitatele ani jmenovatele nepřidával. A dávat je jako public také nebude to pravé ořechové.
Tak třeba v Javě těžko napíšeš funkci mimo třídu.
Dělat je public by asi moc vhodný nebylo, takže buďto udělat ty gettery a
nebo spíš přátelskou třídu, každopádně třída HashZlomky<n> se k
nim nějak dostat musí.
Ano, v Javě jsou to totiž metody
To nevylučuje mé tvrzení "Funkce se píší mimo třídy ve všech jazycích".
A proč se k nim HashZlomky musí dostat? Velmi nerad vidím hrabání na vnitřní proměnné objektů.
Metoda je "jiný" název pro členskou funkci konkrétní třídy. Každá
členská funkce je metoda a každá metoda je členská funkce ale pořád je
to funkce (nebo procedura). Přísně vzato statická metoda je nesmysl protože
to není členská funkce, nepoužívá se s konkrétní instancí třídy ale
samostatně, tudíž to neni členská funkce, tudíž to neni metoda, tudíž i
java má obyčejný funkce.
Protože metoda h ve třídě HashZlomky má k hashování použít čitatele a jmenovatele instance, i když toho zadání nechápu přesně jak, ale dostat se k nim musí.
Nebyla řeč o "členských funkcích", ale o funkcích. Tvá definice
"statické metody" zní také zajímavě a závěr ještě zajímavěji. Dnes
jsem se dozvěděl tolik novinek
Řekni mi jestli je na té definici něco nepravda. Třeba se pletu.
U té definice fakt nevím, protože jak už bylo řečeno, u Javy by pojem "funkce" ztratil jakýkoli význam. Přitom je to stále klíčové slovo.
V každém případě by se statické třídy a metody měly používat pouze v ojedinělých a patřičně odůvodněných případech. Osobně je nepoužívám vůbec.
Já je používam pro nějaký defaultní nastavení tříd. Třeba když mam třídu pro práci s polem, tak v ní budu mít statickou funkci která nastaví defaultní velikost se kterou se vytvoří každej další objekt třídy, u který nezadam velikost explicitně. Takový funkce ale dělam spíš pro doplnění, sice tam sou ale v zásadě je nepoužívam, maximálně když něco testuju, abych nemusel pořád zadávat velikost, atd.
Aha, takové statické metody nepotřebuji. Defaultní hodnoty nastavuji v konstruktoru.
Já taky ale většinou zároveň chci aby existovala možnost vytvořit instanci s použitim konstuktoru bez parametrů. V Javě nebo C# by to nemělo smysl protože tam beztak objekt vytváříš až operátorem new a konstruktor používáš explicitně i když parametry nemá. V C++ ale většinou objekty vytvářim tak že je prostě deklaruju, a tam pokud konstruktor nemá parametry tak se volá implicitně. Pak je dobrý aby takovej konstruktor existoval a dosadil nějaký defaultní hodnoty. Ale taky záleží co je to za třídu, tohle dělam hlavně v knihovnách. V koncových programech defaultní nastavení u tříd nedělam.
Je, právě že ten konstruktor přetížit musim. Chci aby šlo vytvořit instanci s konstruktorem kterym nastavim hodnoty, zároveň pokud konstruktor nezavolam explicitně, použije se konstruktor bez parametrů, po kterym chci aby nastavil hodnoty na ty defaultní. U knihovních tříd chci většinou aby šlo oboje.
Příklad:
Array<int> arr(20); //vytvoří pole o 20 prvcích
Array<int> arr; //vytvoří pole o defaultní velikosti, která se dá
změnit statickou funkcí
Kdybych nepřetížil konstruktor Array() tak se program nezkompiluje.
No vidíš. V tom případě statickou metodu nepotřebuješ.
Ale už chápu, k čemu to používáš. Chápu, ale neschvaluji.
Nepotřebuju ale nějak nevidim že by tam byla v zásadě na škodu. Pokud nechceš tak jí pořád nemusíš používat. Když něco testuju narychlo tak občas trochu usnadní práci, a odendat nebo vykomentovat jí můžu vždycky.
K podobným účelům se obvykle používá closure. Je to nástroj, který byl k tomu stvořen.
Třeba ve třídě String mam statickou funkci která mění defaultní přesnost desetinných čísel zkonvertovaných na String. Tu můžu sice změnit u každý instance zvlášť ale k objektům který vrací třeba operátor + atd. se zvenku nedostanu a pokud chci i pro tyhle změnit přesnost, musim to změnit celý třídě, v tomhle případě tu statickou funkci potřebuju, nebo sem aspoň nepřišel na to jak se bez ní obejít.
Ta "statická funkce" by měla být součástí třídy, která bude poskytovat přesnost pro třídu String nebo i pro další třídy.
http://www.itnetwork.cz/dev-lighter/37
Tady máš tu šablonu třídy UsporadanePole, jestli sem na něco zapomněl tak
dej vědět, jinak by to všechno mělo fungovat. Zbytek možná jindy.
Ona součástí třídy String je. Jenom jí nevoláš s konkrétní
instancí ale s třídou String přímo.
String::set_default_precision(x);
Volat jí s konkrétní instancí by bylo nelogický protože to nastavuje
vlastně všem instancím a ne jenom tý jedný.
Kód:
String str;
str.set_default_precision(x);
nedává smysl protože takhle očekáváš že nastavíš defaultní přesnost
jenom objektu str přitom to nastavuješ celý třídě.
Myslel jsem to jinak. Že by byla součástí jiné třídy a objekty třídy String by využívaly instanci té jiné třídy přes DI.
Uznávám, že je to poněkud komplikované řešení, ale možná by ta třída mohla přímo řešit konverzi na string. Ať tak či tak, v jedné aplikaci by mohlo být víc kategorií přesnosti. S každou by se dalo manipulovat zvlášť.
Páni děkuju moc. Zabralo
ti to hodně času? Je mi jasné že s tím hashem se ti dělat nechce ale
potřeboval bych nakopnout alespoň s tím základem. Mám vytvořenou
hashovací tabulku z minulého roku. Ale to jeho zadání moc nechápu. Mohu ji
využít v tomhle projektu nebo to myslí že vytvořit pomocí toho
uspořádaného pole? Díky moc Ondra
Pro moje účely to bohatě stačí takhle, kdyby bylo třeba tak bych nějak vyřešil aby se u těch objektů ke kterým se nedostanu nastavovala přesnot adekvátně podle těch objektů předávaných parametrem, to by ale pravděpodobně znamenalo půlku tý třídy přepsat a to mi jenom kvuli tomuhle přijde trochu zbytečný.
Moc času to nezabralo, cca hodinu čistýho času, dělal sem u toho ještě
další věci včetně večeře.
Já to taky moc nechápu ale ta tabulka se má asi udělat prostě jako pole v
tý šabloně třídy Hash. Ještě trochu nechápu jak přesně má fungovat
ten hashovací algorytmus, jestli má mít každej prvek svuj vlastní hash a
nebo nějak celkově.
Souhlasím. Někdy se to s tou objektovostí až přehání. Některé třídy pak vypadají univerzálně a znovupoužitelně, ale jsou k ničemu. Stejně není dobré psát v jednom paradigmatu celou aplikaci.
Mimochodem k tý třídě Zlomek si musíš přidělat konstruktor bez
parametrů
Zlomek() : c(1), j(1) {}
Jinak ti nepude vytvořit uspořádaný pole objektů tý třídy.
Potřebuješ:
UsporadanePole<Zlomek,x> pole; ale to nejde když neexistuje konstruktor
bez parametrů a v parametru šablony explicitně konstruktor volat
nemůžeš.
Další důvod proč by třída měla mít implicitní konstruktor a defaultní
hodnoty.
Ono hlavně C++ neni čistě objektovej jazyk a třeba když používáš nějakou Céčkovou knihovnu (což já používam skoro v každym programu) tak se neobjektovým řešením většinou ani nevyhneš.
Úloha sestavení hašovací tabulky nemá s uspořádaným polem nic
společného. Jde o klasickou hašovací tabulku.
Šablona HashZlomky je odvozena ze šablony Hash, jak je uvedeno v
zadání úlohy.
tohle mi přišlo od garanta tudíž výstup by měl být něco jako ta hash tabulka co jsem tu dával ne?
A do těch jednotlivých prvků se mají ukládat rovnou hashe těch zlomků který tam přidáš předpokládam. Ještě mi řekni jak mam vyřešit přístup šablony HashZlomky k čitateli a jmenovateli třidy Zlomek. Možnosti sem tu už vypisoval, vzhledem k tomu že ta třída má settery tak bych asi udělal prostě gettery pro oboje. Mimochodem máš tam chybu, funkce operátoru / zlomky násobí místo aby je dělila.
Elegantněji to asi řešit nejde než si udělat get pro každý z nich.
Možná jsem to mohl udělat jako pair a potom přistupovat na každý z nich
přes first,second ale to už je fuk. Díky za upozornění toho / jsem si
nevšiml
Já ale teď na to nejspíš nebudu mít čas. Můžeš zatim zkusit něco splácat dohromady sám, když se ti to nepovede tak se na to pak podívam, ale nevim kdy. Jinak bych řek že to neni nijak zásadně složitý, to pole je podle mě složitější.
Já to mám teď to středy a ještě dodělávám jiný věci takže to bohužel nestihnu... mě tohle přijde horší protože jsem pořád nepobral moc co po mě chce vlastně... ale i tak díky za ten první
Dneska už to dělat nebudu a zejtra nestíham, tak možná ještě ve středu ale téžko říct jestli bude čas.
Tak jsem něco zkoušel ale nedaří se mi přepsat tu čistě virtuální metodu.. můžu to sem hodit na zkouknutí?
Nevim o tom že by v C++ existovalo nějaký klíčový slovo override. Čistě virtuální funkce se definuje tak že jí prostě v tý odvozený třídě znova deklaruješ a normálně definuješ, pokud neni krátká tak jí definuj mimo třídu. Jakákoliv členská funkce třídy je automaticky inline pokud jí definuješ uvnitř bloku třídy (u statických si nejsem jistej ale myslim že taky) a to u delších funkcí neni dobře.
Zobrazeno 50 zpráv z 64.