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

Člen

Zobrazeno 45 zpráv z 45.
//= 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.
také bych sáhl po Javě )
Já začal s C#.
Pokud je to tvuj prvni jazyk tak se ho nauc poradne. Az budes umet minimalne
jeden fakt dobre tak se zacni ucit dalsi. V teto fazi se jich muzes ucit vic
zaroven, ale ze zacatku se ucit 2 zaraz je celkem sebevrazda, navic kdyz v C++
nektere veci znamenaji neco jineho nez v Jave.
Na cisty C bych se vyprdnul pokud se teda nechces venovat psanim driveru a
jinych podobnych veci.
S javou si dej na cas, C++ je o hodne vic slozitejsi a obsahlejsi. Vim o cem
mluvim, delal jsem Javu 2 roky nez jsem zacal s C++.
Zůstaň u té Javy, pokud nejsi z nějakého důvodu nucen měnit jazyk. Z jakého důvodu se vlastně chceš učit C a C++? Nebráním ti v tom, jen mě to zajímá. Po zkušenostech se jim raději vyhýbám. Pokud potřebuji výpočetní výkon, raději sáhnu po Fortranu. V něm alespoň nenadělám tolik kopanců jako v C.
Já zas dělal 2 a půl roku v C++ a teď sem začal v C#. Je oproti C++
znatelně jednodušší a na klasické winform aplikace daleko vhodnější, ale
oproti C++ mi přijde poněkud omezující, obzvláště nepovolené implicitní
konverze mezi primitivními typy jsou strašně otravné
Jak se tak dívám na tu poptávku tak C++ si ještě pořád vede celkem dobře, a ještě na pár IT středních se ti dva učí
Pokud máš na licenci Windows, tak není co řešit, já si, ale chci
odpočinout od Windows, tak si přeji ntb s Linuxem (Linpus) - při nejhorším
si nainstaluju Ubuntu A tak
dělám Javu
Ty se učíš jen programovací jazyky, po kterých je poptávka?
Zatím jen Javu a po dávkových souborech Windows zrovna poptávka není a C++ bych se chtěl učit taky díky tomu tvýmu porovnávání C# a C++ někde na fóru (kulomet a nůž)
C# je kulomet to jsi četl na stránkách microsoftu ?
Zatím se tu nikdo nehádá, pokud to začne, tak to tu uzavřu.
To jsem použil pro srovnání. Kulomet (Java) je účinnější zbraň, se kterou se naučíš zacházet velmi rychle. Nůž (C++) sice není tak účinný, výuka s ním trvá déle, ale zato je univerzálnější. Co je tedy lepší, nůž nebo kulomet? Záleží, pro jaký účel. Kulomet se hodí na dobývání či obranu, ale paragánovi nůž poslouží lépe.
To srovnání však není 100%. Pro některé úkoly je lepší použít
raketomet
Záleží, k čemu ten jazyk chceš použít a co se chceš naučit. Pokud už umíš programovat objektově z Javy, jak jsem četl, a chceš tímto způsobem programovat dál, jdi do C++. Pro úplné začátečníky je lepší naučit se nejdřív programovat normální imperativní kód bez objektů např. v C, i když to není pro začátečníky taky úplně vhodné. Každopádně C a C++ jsou velmi podobné (i když ani jedno není podmnožinou druhého). Když zvládneš jedno, naučíš se bez velké námahy druhé.
Když se nejprve naučí imperativně, tak se bude těžko přeučovat na OOP. Je lepší se rovnou naučit OOP.
To co píšeš není pravda, jednak C je, až na pár drobných rozdílů, podmnožinou C++ pak C a C++ jsou si podobné jenom v tom že C je v podstatě naprosté jádro C++, v C++ je obrovská spousta věcí navíc a také se v něm programuje jinak. Co se týká přechodu z Javy na C++, tak Java je jednodušší a v C++ se programuje jinak, myslím, že takový přechod nebude jen tak, ale proč ne. Se začátkem v C souhlasím, připadá mi lepší začínat v neobjektovém jazyce ve kterém si programátor všechno musí dělat sám a alespoň se naučí co jak uvnitř funguje, než v jazyce ve kterém hned od začátku na všechno používá již napsané knihovny. Z takového jazyka jako je C se na OOP jazyk dá podle mě přejít snadno.
Já také nejdřív programoval imperativně a až postupně jsem se naučil
OOP a neměl jsem s tím žádný problém
Já jsem s přechodem od imperativního k OOP problém měl. Spousta programátorů ho má dodnes právě proto, že začínali s imperativním a dělali ho příliš dlouho.
C není podmnožinou C++ - jak sám říkáš, jsou tady rozdíly, ne každý program v C je program v C++... ale myslím, že o tomhle nemá cenu nějak dál diskutovat, je to jenom teorie versus praxe. Taky bych radši netvrdil, že je nějaký jazyk obecně jednodušší než jiný, záleží mnohem víc na problému, který v něm řešíš. Java a C++ jsou samozřejmě odlišné, ale objektový koncept zůstává v základu stejný - jeden jazyk používá rozhraní, druhý vícenásobnou dědičnost, jeden je čistě objektový, druhý hybridní, ale jsou to prostě jenom různé přístupy ke stejné problematice. Nehrotil bych to tak.
Tam nejde ani tak o ten objektový přístup, jako spíš o to, co v C++ musíš řešit navíc oproti Javě, například správu paměti. Jinak máš pravdu, koncept je pořád stejný. Co se týče C a C++ tak pořád nesouhlasím, C je podmnožinou C++, téměř jakýkoliv program napsaný v C se dá zkompilovat i jako C++, jsou tam drobné rozdíly, například tvorba struktur, kde se v C používá typedef (pro definování typu a možnost nepsat struct před každou deklaraci, v C++ nepotřebné) nebo deklarace a definice funkcí, kde v C deklarace funkce s prázdnými závorkami znamená neznámou signaturu, kdežto v C++ funkci bez parametrů. C++ je ale z C téměř na 100% zpětně kompatibilní, všechny knihovny a hlavičkové soubory pro C nebo v C napsané můžeš použít i v C++, to dělá z C v podstatě jeho podmnožinu. To že se v C++ programuje jinak, je dáno tím, že C++ má spoustu věcí navíc, které se v něm používají, dá se v něm ale programovat i stejně jako v C.
Tak já nevím, ale myslím, že pokud je jazyk množina řetězců a jazyk A je podmnožinou jazyka B, pokud všechny řetězce z A patří do B, pak třeba program "int main() {int class = 0; return 0;}" patří do C ale ne do C++. Ale tak třeba se pletu. No a správa paměti dělá lehčí řešení většiny běžných problémů, ale nedělá lehčím jazyk jako takový - pokud vím, v Prologu taky paměť neuvolňuješ a nemyslím si, že se dá říct, že je lehčí než C++. Třeba hello world je jednodušší napsat v C++ než v Javě, protože kvůli tomu nemusíš vytvářet žádnou třídu. Ale jsou to podle mě dohady o blbostech.
Cena za GC je dosť vysoká. Správa pamäte je síce ľahšia, ale správa
ostatných nepamäťových zdrojov je náročnejšia kvôly absencii
deterministických destruktorov a následne techniky RAII. To že je každá
trieda odvodená od bazovej triedy zabraňuje implementácii viacnásobnej
dedičnosti. V tomto sa my páči jazyk D, triedy sú spravované pomocou GC,
ale štruktúry su hodnotový typ kde sa volá destruktor pri opustení scoupu,
takže je možné použiť RAII. Viacnásobná dedičnosť je zas dosiahnutá
pomocou interfacov a template mixinov. Škoda že D je relatívne mladý jazyk a
ešte nema poriadne knižnice
Cena za GC nemusí být příliš vysoká. Drahou konstrukcí je např.
String jmeno = "Adam";
if (zena) {
jmeno = "Eva";
}
kterou vídám někdy až moc často. Efektivnější (s polovičním nárokem na GC) je
String jmeno;
if (zena) {
jmeno = "Eva";
} else {
jmeno = "Adam";
}
případně úspornější na zápis
String jmeno = zena ? "Eva" : "Adam";
jmeno sa musí tak či tak inicializovať, či sa inicializuje referenciu na object alebo null je jedno. Otázne je akým spôsobom je konštruovaná String konštanta. Keďže je to imutable object a je známi už pri preklade tak je možne že všetky tie tvoje príklady sa preložia do rovnakého kódu.
Ja som nenarážal ale na rýchlosť GC, ale na to že kvôly GC jazyk nemôže obsahovať rôzne vlastnosti ktoré môžu uľahčiť programovanie (viz RAII).
Pokud podmnožinu myslíš až takto doslova, pak máš pravdu. Já to myslel
z hlediska konceptu a programování jako trakového. C++ nabízí to samé co C
a k tomu spoustu věcí navíc, C nabízí podmožinu toho co C++. Z toho i
vyplývá, že se v C++ dá programovat stejně jako v C, pokud nepoužíváš
nová klíčová slova v chybném kontextu
String je immutable object. Proč tedy neudělat immutable i atribut jmeno?
Skús sa pozrieť na toto: http://programujte.com/…t-tutorials/
Nevím jestli i to tvoje poděkování, ale můj příspěvek byla ironie
Zobrazeno 45 zpráv z 45.