C++ a C#

Jaki język na początek ?
Inny
41%
41% [89]
C#
49%
49% [107]
C++
11%
11% [23]
OT
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 11 lat
0

Programiści .net prawie nigdy nie wiedzą co się dzieje "pod spodem" bo nie potrzebują tego wiedzieć. Spytaj programistę .net co to jest hook albo daj mu zadanie napisania pobierania pliku z http przez winsock-a a nie będzie wiedział o co ci chodzi (moze poza wiedzą ze studiów kiedys tam).

Przydatna jest za to wiedza o działaniu samego frameworka, jak działają poszczególne klasy "pod spodem" itd

LA
  • Rejestracja:około 16 lat
  • Ostatnio:prawie 13 lat
0

c++ -> java
; p

wasiu
  • Rejestracja:prawie 21 lat
  • Ostatnio:4 dni
  • Lokalizacja:Poznań
  • Postów:1552
0

Java jest dla masochistow :P No ale dobrze... zaraz pewnie masochisci zaczna krzyczec, ze im z tym dobrze :P


Full Stack Developer .NET & Angular, Blazor
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0

Nieprawda. Jeśli po case jest jakiś kod, C# składniowo wymaga break

Nie zawsze ;-]

C# bliżej do Lispu niż do C++ pod względem mechaniki.

A bliżej do Delphi i Javy niż do C++ pod innymi względami.
Umówmy się, że C# to nie (C++)++. To osobny język, czerpiący garściami z innych ale i mający własne wynalazki, np. LINQ.
A jeśli komuś zależy na C++ pod .Net, to jest C++/CLI.

rincewind
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0
Azarien napisał(a)

Nieprawda. Jeśli po case jest jakiś kod, C# składniowo wymaga break

Nie zawsze ;-]

Zawsze, gdy w danym case jest kod (co napisałem). Przykład:

Kopiuj
switch (n)
{
    case 1: // ok
        n = 3;
        break;
    case 2: // error: control cannot fall through from one case label ('case 2:') to another
        n = 5;
    case 3: // ok
    case 4: // ok
        n = 123;
        break;
    default: // error: control cannot fall through from one case label ('default:') to another
        n = 0;
}

Chyba, że chodzi Ci o return -- wtedy rzeczywiście break jest niepotrzebny. Z tym, że return działa podobnie jak break (w tym konkretnym kontekście, nie łap mnie za słowa), tylko zamiast wyskoczyć ze switcha, wychodzi z całej metody. Ale idea pozostaje ta sama.


Kerai
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:London
0
wasiu napisał(a)

Java jest dla masochistow :P No ale dobrze... zaraz pewnie masochisci zaczna krzyczec, ze im z tym dobrze :P
A .NET jest dla pedałów :P No, ale dobrze... zaraz pewnie jacyś zaczną krzyczeć, że im dobrze z tym ;>

deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

Wolę nie myśleć dla kogo Lisp...


I nie udawaj, że rozumiesz.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0
rincewind napisał(a)

Chyba, że chodzi Ci o return

także goto i continue.

goto pozwala na "spadnięcie" case'a jak w C++ jeśli naprawdę tego chcemy

Kopiuj
                switch (i) {
                    case 1: JakiśKod();
                        goto case 2;
                    case 2: JakiśKod();
                        break;
                }

a nawet na więcej, bo możemy skakać po case'ach jak chcemy, a continue ma zastosowanie jeśli switch jest w pętli

Kopiuj
            for (;;)
                switch (i) {
                    case 1: continue;
                }
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Wrocław
0
polaczek17 napisał(a)

Od banalnej rzeczy zacznijmy jak ... zmienne.

Zmienne to chyba podstawa większości języków programowania. :|

Roznice sa tylko w tym ze w c++ aby uzyc liczby bez znaku uzywamy "unsigned"i typ zmiennej a w c# piszemy zwykle "u" i po nim typ zmiennej.

A to Tobie chodzi o typy zmiennych?
W C/C++ int to nazwa typu, tak? A w C# to tylko alias na nazwę klasy System.Int32. Podobnie jest z resztą: char, byte, sbyte, uint, short, ushort, long, ulong, itd. to wszystko aliasy.
To, co w C/C++ nazywa się char, w C# nazywa się byte. A jaki jest odpowiednik char z C# w C++? Bo wydaje mi się, że nie ma.

Reszta jest taka sama.

Taaaa...

dalej instrukcja warunkowa dziala identycznie jak w c++.

Oczywiście, że nie. If w C# akceptuje wyłącznie wartości logiczne. W C/C++ wstawisz tam w zasadzie cokolwiek.
Jakie wartości może przyjmować wyrażenie w instrukcji switch w C++, a jakie w C#?

Da się w C++ zrobić klasę statyczną albo jawnie abstrakcyjną? A W C# dziedziczyć z kilku klas? Są w C++ interfejsy? Struktury tu i tu też są tym samym? Średniki też wstawia się tak samo?
Są w C++ są operatory: is, ??, => ?

Więcej różnic niż podobieństw, nawet w składni. ;]

KR
Moderator
  • Rejestracja:około 21 lat
  • Ostatnio:31 minut
  • Postów:2964
0

Schodzicie powoli z tematu a rosnąca temperatura dyskusji może spowodować przeniesienie wątku do flame.

Od C++ nie warto zaczynać dlatego, że ten język jest niepotrzebnie skomplikowany i niespójny w wielu miejscach - czyli zamiast uczyć się rzeczy uniwersalnych, człowiek uczy się jak obchodzić ograniczenia języka albo walczy z kompilatorami, które nie potrafią wygenerować czytelnego komunikatu o błędzie. Więcej o tym jest tu: http://yosefk.com/c++fqa/ (może miejscami gościu pisze zbyt emocjonalnie, ale duża część krytyki jest zgodna z rzeczywistością i dobrze wyważona).

Zmienne to chyba podstawa większości języków programowania

Tylko imperatywnych :>

OJ
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 11 lat
0

Dzięki za pomoc ale teraz to mam tylko większy mętlik :P

P1
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 13 lat
  • Postów:1708
0

To ja proponuje dodac ankiete bo takie posty faktycznie moga zrobic metlik w glowie :P Dodaj ankiete niech ludzie wybiora miedzy c# a c++ i bedziesz mial statystyczne potwierdzenie jaki jezyk wybrac wedlug wiekszosci.

Ja podsumuje swoje wypowiedzi:
1.) Jesli nigdy wczesniej nie kodziles nie miales z tym absolutnie zadnej stycznosci wez sie za c++.
2.) Jesli juz kiedys kodziles w czyms przez jakis czas moze faktycznie lepiej popracowac w C#.

Jesli wybierzesz 1 wariant do wariantu 2 z czasem na pewno przeskoczysz.
Jesli wybierzesz wariant 2 do wariantu 1 byc moze skoczysz byc moze nie.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 2 godziny
0

Na studiach zwykle pisze się programy w C++ i Javie. C++ do wydajnych programów na ASD, Java w zasadzie do wszystkiego innego (jako że jest 100x bardziej wygodna), oprócz takich rzeczy jak np MPI, których nie ma w Javie.

Jeśli dobrze zauważyłem to u nas na WMiI UJ pierwszaków nie uczą już Turbo Pascala, a od razu przechodzą do Javy. ASD jest na drugim roku, więc kolejność jest dość dobra dla żółtodziobów.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0
donkey7 napisał(a)

Jeśli dobrze zauważyłem to u nas na WMiI UJ pierwszaków nie uczą już Turbo Pascala, a od razu przechodzą do Javy. ASD jest na drugim roku, więc kolejność jest dość dobra dla żółtodziobów.

Z tego co widzę, coraz więcej uczelni na pierwszym roku zaczyna od Javy bądź C#

byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
0

I dobrze, bo zaczynanie od Turbo Pascala to zawsze była dla mnie parodia.
IMO dużo prościej nauczyć się C++ niż tp (może dlatego, że zaczynałem od C++ i nie widzę jakoś strasznie tych problemów, które ludzie wymieniają - dla mnie C++ jest naturalny ;))
Dlatego ja osobiście polecam C++


0
byku_guzio napisał(a)

I dobrze, bo zaczynanie od Turbo Pascala to zawsze była dla mnie parodia.

Nom, w ogole dotknac Pascala to jest parodia. Co do C++ to tez zaczynalem od niego i za wiele w nim teraz nie pisze. Sporadycznie 2/3 razy na 0.5 roku.

@Autor: Nie popelnij tego samego bledu co ja i nie zaczynaj od C++. Strasznie ten jezyk zniecheca do innych jezykow wysokopoziomowych. Moze zacznij od czegos sensownego jak chocby C, a nie tam C++, a tymbardziej nie C# i Java. Te dwa ostatnie jakby spojrzec na nie szerzej to cos takiego jak bys klikal programy, a nie je pisal. Tak jak juz zostalo powiedziane za raczke lapia i nie chca puscic. Kto to slyszal, zeby w switch'u case'ow tak pilnowac, paranoja. C gwarantuje Ci mozliwosci rozwoju, a wszystko w bardzo przyjaznym srodowisku.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 2 godziny
0

Dawno nie pisałem nic w C++, ale np iteratory w STLu to był dla mnie koszmar. Strasznie trudno było wydedukować poprawny typ iteratora. Taki Boost na przykład jest pisany tak, aby było jak najmniej metod wirtualnych, zamiast tego stosują wymyślne templaty itp metaprogramowanie, czarna magia.

Na uczelni na każdym kompie jest Dev-C++ i to chyba z nim miałem kurs "Programowanie" (niby to było do C++, C# i Javy, ale w zasadzie był tam "tylko" C++).

Myślę, że za dużo u nas na UJ linuksiarzy, żeby się przenieć na C# z Javy i bardzo dobrze. Linux też się lepiej nadaje na pierwszy system - uczy korzystać z hierarchii uprawnień.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0
somekind napisał(a)

W C/C++ int to nazwa typu, tak? A w C# to tylko alias na nazwę klasy System.Int32.
To akurat bez znaczenia. Chodziło o to, że w C++ jest int i unsigned int, a w c# jest int i uint.

A jaki jest odpowiednik char z C# w C++?
wchar_t

Struktury tu i tu też są tym samym?
ba, klasy są nie tym samym... w C++ klasa od struktury różni się tylko tym, że klasa ma pola domyślnie private a struktura public. Więc struktura z C# jest odpowiednikiem klasy C++. A odpowiednika klasy C# w C++ brak.

Więcej różnic niż podobieństw, nawet w składni.
No nie przesadzajmy. Składnia C# wywodzi się z C i jest to niezaprzeczalne.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Wrocław
0
wasiu napisał(a)

Zaczyna sie tylko i wylacznie od C, dalej C++... a potem w przyszlosci mozna myslec o C#. Ze trudniej? Sorry ale ktos kto zaczyna, to ma byc w przyszlosci programistą, a nie dupą wołową prowadzoną za rączke.

Zacząłem od C, potem C#. C++ szczęśliwie ominąłem. W pracy jakoś nikt mnie za rączkę nie prowadzi.

z tym, ze .NET to glownie wykorzystywanie bibliotek, a nie programowanie

Rozumiem zatem, że w C++ nie używa się żadnych bibliotek? A także, że programowanie nie polega na tworzeniu oprogramowania ale na spędzaniu 80% czasu na rozwiązywaniu problemów z zarządzaniem pamięcią.

Krolik napisał(a)

Zmienne to chyba podstawa większości języków programowania

Tylko imperatywnych :>

Jasne, tylko to było w domyśle. Myślałem nawet, żeby to dodać w tym zdaniu, ale uznałem, że jakbym go nie ujął, to ktoś się do czegoś przypieprzy. Bo zawsze znajdzie się jakiś wyjątek.
Z drugiej strony, to jednak większość używanych i nauczanych języków jest imperatywna. Mylę się?

Azarien napisał(a)
somekind napisał(a)

W C/C++ int to nazwa typu, tak? A w C# to tylko alias na nazwę klasy System.Int32.
To akurat bez znaczenia. Chodziło o to, że w C++ jest int i unsigned int, a w c# jest int i uint.

To ma ogromne znaczenie. To jest różnica w architekturze języka, ogromna różnica. "int" kompilatorowi C++ mówi: "zarezerwuj tutaj 4 (czy ileś) bajtów", a kompilatorowi C#: "to będzie obiekt typu System.Int32, ze wszystkimi jego właściwościami i metodami".

A jaki jest odpowiednik char z C# w C++?
wchar_t

Faktycznie, w C++ jest. Ale o ile dobrze pamiętam, to w C tego nie ma?

ba, klasy są nie tym samym... w C++ klasa od struktury różni się tylko tym, że klasa ma pola domyślnie private a struktura public. Więc struktura z C# jest odpowiednikiem klasy C++. A odpowiednika klasy C# w C++ brak.

A jak z przechowywaniem obiektów tychże rodzajów w pamięci? Bo raczej akcesory dostępu nie są jakąś super ważną różnicą.

No nie przesadzajmy. Składnia C# wywodzi się z C i jest to niezaprzeczalne.

Wszystko wywodzi się z ALGOLA. I to jest dopiero niezaprzeczalne.

Składniowo te języki się różnią, bo różna jest ich filozofia działania. Gdyby były podobne, to mógłbyś wziąć dowolny kod w języku X, wysłać do kompilatora Y i by się skompilował. Ale tak nie jest. Pewne pokrycie słów kluczowych nie wystarczy do stwierdzenia, że składnia X wywodzi się z Y, skoro mechanizm działania instrukcji jest inny.

deus napisał(a)

Może dlatego na MIT zaczynają od Scheme.

Ale tam jest cywilizacja, a u nas jebani fetyszyści swojego sposobu myślenia. Każdy język programowania, każda technologia, każdy wzorzec projektowy to g**no, które jest gównem, póki nie pozwoli stworzyć czegoś przydatnego ludziom. Nikogo nie obchodzi jak fajny jest kod. Fajny może być efekt jego działania. Niestety większość "programistów" u nas nie jest w stanie tego pojąć.

0
donkey7 napisał(a)

Na studiach zwykle pisze się programy w C++ i Javie. C++ do wydajnych programów na ASD, Java w zasadzie do wszystkiego innego (jako że jest 100x bardziej wygodna), oprócz takich rzeczy jak np MPI, których nie ma w Javie.

Jeśli dobrze zauważyłem to u nas na WMiI UJ pierwszaków nie uczą już Turbo Pascala, a od razu przechodzą do Javy. ASD jest na drugim roku, więc kolejność jest dość dobra dla żółtodziobów.

U mnie na uczelni było chyba więcej C# niz pozostalych jezykow razem wzietych (z czego sie cieszylem, dopuki na kolejnym z kolei przedmiocie robilismy to samo :) )

KA
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Gród Króla Kraka
0

W C# brakuje mi możliwości utworzenia takiej konstrukcji:

Kopiuj
string test = " ala ma kota "
  " kot ma alę "
  " sierotka marysia ";

Co by kompilator automatycznie sklejał stringi bez żadnych operatorów konkatenacji ;)


Hey ho!
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0
somekind napisał(a)

int" kompilatorowi C++ mówi: "zarezerwuj tutaj 4 (czy ileś) bajtów", a kompilatorowi C#: "to będzie obiekt typu System.Int32, ze wszystkimi jego właściwościami i metodami".
Tak - ale tylko kiedy tych metod potrzeba. Kiedy nie trzeba, staje się tylko 32-bitową liczbą ze znakiem, aby nie robić zbędnego narzutu. Bardzo sprytne rozwiązanie.

wchar_t
Faktycznie, w C++ jest. Ale o ile dobrze pamiętam, to w C tego nie ma?
Też jest.

Wszystko wywodzi się z ALGOLA. I to jest dopiero niezaprzeczalne.
Ale Algola już nie przypomina. A C# wyraźnie przypomina C/C++ (klamerki, if, for, while, ..., ...)
Nie mówię o jakiejś wewnętrznej filozofii. Mówię o składni.

KR
Moderator
  • Rejestracja:około 21 lat
  • Ostatnio:31 minut
  • Postów:2964
0

Składnia musiała nieco przypominać C, C++, Javę, bo jakby programy wyglądały jak LISP, to większość koderów powiedziałaby "o k***a, ile nawiasów" i na tym skończyłoby się ich zainteresowanie tym językiem.
Tak to już jest, że lubimy bardziej rzeczy, które choć trochę znamy.

A co do języków do nauki programowania, całkiem sympatyczny jest Python.
W ogóle wszelkie języki, które mają REPL są chyba dla początkujących dużo przyjaźniejsze. Scali na razie nie polecam głównie dlatego, że słabo trochę z dokumentacją.

A co do języków które "prowadzą za rączkę" to jest to o tyle dobre, że:

  1. w C++ napiszesz program, program działa u ciebie, pokazujesz kumplowi, wywala mu się z "segmentation fault" albo czymś równie informatywnym.
  2. napiszesz błędny program w C# i albo dostaniesz od razu po łapach od kompilatora, albo dostaniesz wyjątkiem przy uruchomieniu; w każdym razie nie będzie niemiłego rozczarowania i siedzenia 3 dni nad kodem, czemu to nie działa

Zauważ, że w obu przypadkach ostatecznie to Ty musisz napisać poprawny kod, w żadnym z nich kompilator nie napisze go za Ciebie (więc nie ma tak naprawdę żadnego prowadzenia za rączkę). Różnica jest taka, że w drugim przypadku będzie to zwyczajnie mniej frustrujące.

Dodatkowo nowe języki są projektowane na bazie doświadczeń z innymi językami. I są często konstruowane tak, aby pisanie nieczytelnego kodu najeżonego hackami było utrudnione, co szczególnie dla początkującego ma duże znaczenie. Jak się uczysz pływać to od razu idziesz na głęboką wodę na niestrzeżone kąpielisko czy może zapisujesz się na basen?

W C# brakuje mi możliwości utworzenia takiej konstrukcji

No, naprawdę straszne.

deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0
Krolik napisał(a)

Składnia musiała nieco przypominać C, C++, Javę, bo jakby programy wyglądały jak LISP, to większość koderów powiedziałaby "o k***a, ile nawiasów" i na tym skończyłoby się ich zainteresowanie tym językiem.

Napisz jakiś mały i prosty program w Scali (tak żeby filozofia nie była skrajnie różna), ja to przepiszę na Common Lisp, Scheme albo w ostateczności Closure. Policzymy czy faktycznie jest ich aż tak cholernie więcej. Tak naprawdę to wizualnie wydaje się tych nawiasów więcej ze względu na ich 'oryginalne' położenie - otaczają cały kontekst wywołania, nie same argumenty.

To "o k***a, ile nawiasów" było pierwszym językiem z REPL-em, uwielbianym narzędziem dawnych hakerów itd. NASA do dziś używa ze względu na 'standardowe' właściwości, jak możliwość dynamicznej aktualizacji definicji klas czy funkcji - bez restartu można zmienić praktycznie wszystko w programie, obiekty się 'automagicznie' dostosują, ew. z pomocą hooków.


I nie udawaj, że rozumiesz.
KR
Moderator
  • Rejestracja:około 21 lat
  • Ostatnio:31 minut
  • Postów:2964
0

Deus, masz pełną rację, problem z tym, że LISP wygląda jakby było w nim dużo nawiasów, mimo że jak się je dokładnie policzy, to jest wszystko w normie. Myk polega na tym, że LISP stosuje jeden rodzaj nawiasów do grupowania (), a języki wywodzące się z C - kilka {}()[]. Ludzie sobie z tego nie zdają sprawy i pewnie stąd się wzięło "Lost In Superfluous Parantheses".

deus
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

user image


I nie udawaj, że rozumiesz.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.