Ahoj lidi, tak jsem tu zas. Chci se jen zeptat ... stále se učím programovat a objevuju nové a nové věci, ale stále nevím jak si to odzkoušet. Zkrátka, chybí mi nějaká zadání, cvičení, příklady. Sám z hlavy totiž nejsem schopnej vymyslet co naprogramovat, abych si odzkoušel co už umím a čeho všeho už jsem schopnej. Ted například dokončuju základy objektového programování, třídy a objekty, ale nevím co vytvořit. Nějaké jednoduché funkce typu "do i vlož A" a druhou funkci aby to vypsala to je na nic. Neví někdo o nějakém webu ? Nebo kde by se nějaké příklady na procvičení daly najít?
Druhá otázka, někdo mi někdy říkal, že výhoda objektového programování je v tom, že nemusíš všechno psát ale stáhneš si objekt z internetu (třeba na přehrání video souboru) a ten si upravíš. Kde se daj takhle sehnat objekty? Je to zdarma? Díky za odpovědi ...
Fórum › C / C++
Příklady?
No tak ja zapatram v pameti, co se u nas davalo jako zapoctovy test z OOP:
1) Zkuste naprogramovat objekt, ktery se konstruuje pomoci stringu ve kterem je zadany matematicky vyraz, aktery bude mit funkci int vyhodnot(int* vars).
a) jednoduse to bude v prefixu treba +3 * 6 2 (jednoduche jak facka)
b) v infixu se zavorkami a prioritou orepatoru treba 3+(6*2) nebo ekvivalent 3+6*2
c) s promennymi matemat. vyr bude treba 3+6*x0 a pak se bude volat
int[1] a;
a[0] = 2
vyhodnot(a);
vysledky jsou jednoduse overitelne... dalsi priklady v pripade zajmu dodam(email-me)
Díky, jen nějak nepobíram co to je infix a prefix. Ale to si někde najdu.
Ještě mam docela bordel v konstruktorech. V jedněch skriptech z vejšky sem se dočet, že funkce konstruktoru spočívá v tom, že dosazuje počáteční hodnoty proměnnejch co jsou definovaný jako private: ... A to nejdou v tom private rovnou definovat třeba jako int i=1 ? To by pak byly konstruktory zbytečný ne ? A je to opravdu jedinej účel konstruktorů ve třídách ?
To vollf82: konstruktory sloužej k initializaci instance objektu
vollf82 píše:Druhá otázka, někdo mi někdy říkal, že výhoda objektového programování je v tom, že nemusíš všechno psát ale stáhneš si objekt z internetu (třeba na přehrání video souboru) a ten si upravíš. Kde se daj takhle sehnat objekty? Je to zdarma? Díky za odpovědi ...
Neviem, ale bud si si jeho odpoved zle vysvetlil alebo doticny ani nevedel o com hovory. Vyhoda OOP nieje v tom ze nemusis vsetko pisat. Znovupouzitelny kod sa da pisat aj v klasickom C. Vyhody OOP clovek zacne vnimat pri navrhovani, analize, designe aplikacii.. Pomocou objektov sa lebsie da popisat urcity problem.S Objektami sa omnoho lebsie manipuluje. Dolezite veci pri OOP je dedicnost, polymorfizmus, atd.. Hotovych kniznic je na nete habadej. Neexistuje vsak nejaky centralny web na ktorom najdes vsetko co potrebujes. DOlezite je vediet CO potrebujes. Potrebujes sa pripojit na ORACLE? Siahnes po OCCI kniznici, potrebujes co ja viem pracovat s GUI vo windowsoch, siahnes po MFC alebo VCL. Mnozstvo veci je zadarmo, mnozstvo veci zadarmo nieje. Netyka sa to len OOP ale taktiez aj proceduralnych veci. Napriklad kniznice ako EXPAT, CURL, PCRE.. tie niesu OOP a pritom to je znovu pouzitelny kod. Kniznica pre GNOME je Ceckovska bez OOP kdezto kniznica QT pre KDE je objektova a da sa povedat ze ich vyznam je rovnaky. Samozrejme OOP je na tom podstatne lebsie zo znovupouzitelnym kodom(To je pre tych ktory by ma chceli chytat za slovicka).
Co sa tyka tvojej prvej otazky.. podla mna, najlebsie sa clovek doslova vytrenuje na zadania z realneho zivota, z praxe. Totizto vsetka ta teoria co je to konstruktor, na co su virtualne fcie je zbytocna ak ich nevies v praxi pouzit pri navrhu aplikacie. Urcite si uz potreboval nejaky jednoduchy softik, tak si ho naprogramuj. Premysli si co od neho potrebujes, co by mal robit.. hladaj riesenie.. ako na to.. Napriklad dam krk ze si mal neraz problem s casovanim tituliek pri filmoch.. idelane si nakodit nejaku vec na to.. je to jednoducha praca z cislami a subormy.. Vyrabaj si male utilitky, neskor ked ziskas skusenosti s hladanim v dokumentaciach sa pustaj do vecsich aplikacii..
Good luck ;)
Vřelé díky za obsáhlou odpověď. Jde právě o to, že jsem v celku ještě nic nenaprogramoval (když nepočítám ty triviální cvičení z lekcí C++ na tomhle webu). Za těch pár měsíců co do toho čumim, hledam všude možně po netu a čtu a čtu, tak to všechno chápu, proč je to tak a tak a proč to tak funguje. I když koukám na kód nějakýho jednoduchýho prográmku na vysvětlení, tak tomu rozumim. Ale pak spustim Dev C++, nahodim prázdnej source file ..... a konec. Prostě nevim jak začít. Maximálně mě napadne naincludovat iostream protože to se potřebuje snad vždycky, zkrátka asi něco pořád dělám špatně a potřeboval bych nakopnout.
Ale ten programek na titulky je dobrá inspirace, to zkusim. S tou dokumentací máš pravdu, docela v tom plavu protože je tam toho hafo a nevim jak hledat (na MSDN a nebo http://cppreference.com/ ).
A měl si opět pravdu, už je to dlouho co mi to ten člověk říkal, a já si splet "objekty" s "knihovnama". Tak on to myslel, že na všechno jsou knihovny.
Každopádně díky, budu se snažit dál ... co zbývá ...
Tato komponenta je ActiveX a tym padom ak tvoj media player v systeme dokaze prehravat streamovane data, tak to dokaze aj ta komponenta. Taktiez je mozne na to ist skrz DirectX vid priklad streamovaneho prehravania: http://www.codeproject.com/audio/DirectSoundAudioStream.asp.
Je treba vediet o danom inet-radiu v akom formate streamuje. Ci sa jedna o RealPlayer ci o M$ format, alebo mpegovske zalezitosti alebo najnovsie aj flashoviny. U niektorych tychto technologii je problem s licenciou a tak neviem ci najdes nejaku kniznicu napriklad na RealPlayer.
P.S: Do tejto problematiky vlemi nevidim, nestudoval som streamovane audia a formy prehravania.. takze sa ospravedlnujem za vzniknute skreslenia..
Abych zbytečně nezakládal téma tak to hodím sem.
Lidičky jak mam používat dynamické pole deklarované třeba takto - char **t
Nikde sem to nenašel vysvětlený, ale prý se to tak dělá. Zkoušel jsem tento kód, ale je mi jasný že je úplně špatně:
#include <iostream>
class HELLO {
private:
char **t;
public:
void nazdar(*x);
};
void HELLO::nazdar(*x)
{
char *t=&x;
x="Ahoj světě";
}
using namespace std;
int main() {
return 0;
}
Nějak se v tom motam, ale jestli mi to někdo na tomhle jednoduše vysvětlí, tak to pochopim hned. Jde o to, aby se nemuselo pevně zadávat počet znaků nebo řádků, třeba char *t[20]. Díky ...
Hmm ten isty dotaz len trosku odlisny. Vysvetlenie: Totizto char** nieco nieje este dynamicke pole. Ide o ukazovatel na ukazovatel. Ak chces pouzivat znaky z premennlivou dlzkou v C++, pouzivaj string. Ak potrebujes pole stringov, pouzi vector<string>. Usetris si tym kopec casu, budes chapat co ti ten kod roby a kod bude omnoho prehladnejsi.
Pravdepodobne z C++ len zacinas. Co si teda napisal? Napisal si triedu, ktora ma clensku premennu t, ukazujucu niekde do pamate.To je v poriadku.Zla je vsak jej clenska funkcia nazdar().
prva chyba:
//zle
nazdar(*x);
//dobre
nazdar(char* x);
duha chyba:
&x ti nevrati text, ale len prvy znak a taketo pretypovanie nieje mozne nakolko tento znak chces ulozit do ukazovatela.U tychto retazcov je potrebne
si uvedomit co potrebujes a kde sa to v pamati nachadza.Cize ci ti staci len odkazovat sa na tu hodnotu alebo je lebsie cely obsah nakopirovat do novoalokovaneho miesta v pamati.
Tretia chyba:
Z tvojho kodu nieje jasne co chces aby tvoja funkcia nazdar() robila. Ma pridat novy text do clenskej premennej t? Premenna X je(pravdepodobne) vstupna premenna tvojej funkcie. Poslednym riadkom uplne straca vyznam a jej hodnotu vlastne zmazes, nakolko nastavis ukazovatel na "Ahoj Svet" ktory ukazuje na zasobnik.
Stvrta chyba:
Ak teda spravne chapem, a ty cchces vytvorit objekt s clenskou premennou t, do ktorej funkcia nazdar() bude ukladat text, tak nemusis vo funkcii nazdar() premennu t deklarovat. Respektive, budu to 2 rozne premenne, nebude to ta ista. Ja som zo zaciatku dost casto pouzival this->t aby som vedel co je clenska premenna a co je premenna funkcie. Teraz pouzivam urcitu notaciu mien.
No tam šlo jen o to, že prostě dopředu nevím, jak dlouhý pole budu chtít (jak dlouhá bude věta -> každej znak je samostatně v poli).
Tak do pole char *t[20] bych moh napsat jen větu o 20 znacích. A právě jsem někde četl, že se to dá udělat tím char **t (a možná ještě v kombinaci s new a delete) a pak se bude pole dynamicky zvětšovat podle toho, jak dlouhou větu napíšu. Nevím jestli to dobře píšu a jestli víte o co jde, ale někdo už to tak psal tak to určitě možný je.
Citace:
V deklaraci třídy je zadáno pole ukazatelů na řádky následujícím způsobem:
char* t[20]; //pole řádků (ukazatelů)
Zadáváme zde pevný (maximální) počet řádků. Profesionálnější je toto:
char **t //pole řádků
Sice tam mluvějí o poli řádků, ale to je myslím jen detail oproti tomu co jsem psal já. Když tak všechno z čeho se učím je na
http://objekty.vse.cz/Programovani/OopC5
Tato komponenta je ActiveX a tym padom ak tvoj media player v systeme dokaze prehravat streamovane data, tak to dokaze aj ta komponenta. Taktiez je mozne na to ist skrz DirectX vid priklad streamovaneho prehravania: www.codeproject.com/audio/DirectSoundAudioStream.asp.
Je potom nějakej příkaz jako Form2->MediaPlayer1->FileName="http://www.play.cz/radio/evropa2-64.asx";??
Nebo MediaPlayer1->URL=...??Ve Visualu jde třeba to s tím URL, ale tady si nevím rady...Díkec
To vollf82: POZOR!! nasledujucu citaciu si zle vysvetlujes:
V deklaraci třídy je zadáno pole ukazatelů na řádky následujícím způsobem:
char* t[20]; //pole řádků (ukazatelů)
Zadáváme zde pevný (maximální) počet řádků. Profesionálnější je toto:
char **t //pole řádků
POZOR!! jedna sa o premenlivy pocet riadkov, nie znakov!! inac doporucujem si podrobnejsie prejst 3-ti prispevok od Jura http://www.programujte.com/forum.php?akce=prispevek&id=3354&sekce=dynamicka-alokace-pameti v ktorom pekne napisal ako na dynamicke pole.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Příklady na C# — založil OndraT
Příklady — založil Marous Michal
C++ priklady — založil noob
Moderátoři diskuze