C++ a C# - różnice

0

Może mi ktoś tak ogólnikowo i pokrótce wyjaśnić jakie są różnice między C# a C++?
Są one mniej więcej takiego typu jak C a C++ czy poszły one nieco dalej i jest to dość głęboka modyfikacja składni?

Pytam tutaj bo nie znalazłem takiego tematu w szukajce, a samemu nie chce mi się porównywać zmian na podstawie przykładów.

Pozdrawiam

0

Hm, na pierwszy rzut oka raczej podobnie, ale... c# jest np. w pełni obiektowy. W c++ napiszesz int tablica[]; w c# int[] tablica; Drobna różnica składniowa? Nie bardzo ;) Różnicą jest to, że int[] jest typem, a nie zbiorem zmiennych int. int[] jest pochodnym abstrakcyjnej klasy System.Array... i tego typu rzeczy jest cała masa.

0

Yhy rozumiem, czyli jest mniej więcej tak jak pomiędzy C a C++ - drobne, ułatwiające życie zmiany :)

Dzięki Annoying :(

0
Robster napisał(a)

drobne, ułatwiające rzycie zmiany :)

http://www.sjp.pl/co/rzy%E6

0
AdamPL napisał(a)
Robster napisał(a)

drobne, ułatwiające rzycie zmiany :)

http://www.sjp.pl/co/rzy%E6

Wstyd mi :D

HideYoshi w moim przypadku strony programistyczne najczęściej ograniczają się do Polskiej sieci :/
Dzięki za link.

0
Robster napisał(a)

Yhy rozumiem, czyli jest mniej więcej tak jak pomiędzy C a C++ - drobne, ułatwiające życie zmiany :)

[rotfl]

To są trzy zupełnie inne języki.

0
Robster napisał(a)

Yhy rozumiem, czyli jest mniej więcej tak jak pomiędzy C a C++ - drobne, ułatwiające życie zmiany :)

I tak i nie. Wszystko zależy od tego co chcesz pisać. C# jest nastawiony głównie na aplikacje Windows i wszelkie platformy M$(DirectX, XNA itp.). C++ jest bardziej uniwersalny. Zmiany nie są aż tak drobne, bo C# nie posiada np. wskaźników.

0

Nieprzenośność kodu na inne platformy niż Windows, uzależnienie od Microsoftu; to rzeczywiście ułatwiające życie zmiany...

C, C++ to mniej więcej ta sama rodzina... C# to już wymysł Microsoftu, który chciał sklonować Javę.. nie daj się omotać literką C w nazwie...

0
somekind napisał(a)
Robster napisał(a)

Yhy rozumiem, czyli jest mniej więcej tak jak pomiędzy C a C++ - drobne, ułatwiające życie zmiany :)

[rotfl]

To są trzy zupełnie inne języki.

Może dla doświadczonych informatyków, dla mnie to prawie jedno i to samo :) Gdy uczyłem się C++ z Symfonii były tam od razu wskazówki dla osób które znały C. Na tej podstawie mogę powiedzieć, że dla mnie C i C++ to niemal to samo, a zmiany są kosmetyczne.

havi rzeczywiście słyszałem już od kogoś, że C# poszedł w kierunku Windows. A o wskaźnikach nie wiedziałem, niemniej cieszy mnie to bo wskaźników nigdy nie lubiłem :D Ciekawe czym je zastąpili.

0
Robster napisał(a)

A o wskaźnikach nie wiedziałem, niemniej cieszy mnie to bo wskaźników nigdy nie lubiłem :D Ciekawe czym je zastąpili.

Wskaźniki zastąpiono doskonalszymi referencjami. Referencja tym różni się od wskaźnika, że nie może wskazywać przypadkowego miejsca w pamięci. Zawsze wskazuje konkretny egzemplarz obiektu lub jest pusta.

0

C# jest nastawiony głównie na aplikacje Windows

Programowanie aplikacji WEB też jest możliwe i wspierane przez FCL. (edit: właśnie, C# ma bardzo bogatą bibliotekę klas)

Wskaźniki zastąpiono doskonalszymi referencjami

Wskaźniki również istnieją, ale ich stosowanie nie jest zalecane. I wymagają bloku unsafe :P

0

Różnica jest taka, że C# jest dla dziewczynek a C++ dla prawdziwych mężczyzn :]

0

A Lisp dla zoofili, Cobol dla pedałów.

C# i C++ to dwa całkowicie różne języki, łączy je tylko podobieństwo składni (a i to tylko miejscami).

0

Nie zgodze się!
COBOL jest dla nekrofili ale raczej tych hetero.

0

Poważnie to Cobol jest dla każdego, jako miła zabawka pokroju LOLCode...

0

Pierwsza podstawowa różnica między tymi językami jest taka, że w C++ występuje wielodziedziczenie czyli dana klasa może dziedziczyć po więcej niż jednej klasie jednocześnie, a w C# podobnie jak w Javie dana klasa może dziedziczyć tylko po jednej klasie, ale za to może implementować wiele interfejsów.
Druga podstawowa różnica jest taka, że w C# podobnie jak w Javie jest jedna klasa bazowa Object po której niejawnie dziedziczą wszystkie inne klasy, a w C++ czegoś takiego nie ma (wyjątkiem jest biblioteka VCL C++ Buildera).
Trzecia istotna różnica to brak wskaźników w C#. Podobnie jak w Javie korzysta się z referencji.
Kolejna różnica jest taka, że generalnie programy napisane w C# potrzebują specjalnego środowiska uruchomieniowego .NET Framework, które generalnie zwalnia programistę w troski o zwalnianie nieużywanych zasobów pamięci (podobnie jak w Javie, zwalnianiem pamięci zajmuje się tzw. odśmiecacz pamięci czyli garbage collector), aczkolwiek w niektórych przypadkach programista musi sam zwolnić niektóre zasoby.
To takie najważniejsze różnice. Poza tym w C# 3.0 są pewne nowości jak choćby typy anonimowe czy rachunek lambda, które nie występują w C++ i w Javie.

0

Przepraszam bardzo że się wtrącę, ale o jaki [CIACH!] brak wskaźników chodzi?

0

Właściwości, konstruktory statyczne, anonimowe metody (nie lambdy), delegaty (w prosty sposób sensownych delegatów w C++ uzyskać się nie da), internal, pełne OOP, reflection... To tylko podstawowe elementy C#, nad extension methods, LINQ i innymi miłymi rzeczami rozwodzić się nie ma senu.

Lambdy to nie argument - C++0x. Akurat VCL to kiepski przykład dziedziczenia, lepiej prezentuje się tutaj Qt.

@Fanael, bloki unsafe to odpowiednik asm z C++. 'Czysty' C# to C# bez unsafe, tak jak 'czysty' C++ == C++ bez asm.

0
Igor1981 napisał(a)

Pierwsza podstawowa różnica między tymi językami jest taka, że w C++ występuje wielodziedziczenie czyli dana klasa może dziedziczyć po więcej niż jednej klasie jednocześnie, a w C# ...

Podstawowa różnica to jest pełna obiektowosc, czyli to o czym pisał Annoying . Czytam Twojego posta to mam wrazenie, że skopiowałeś jakieś podstawowe info z Wikipedii :-) .

0

Wiem, deus, wiem. Ja tylko prostuję dosyć powszechny błąd - wskaźniki w tym języku i można korzystać do woli, jak komuś naprawdę będą potrzebne.

0
havi napisał(a)

C# jest nastawiony głównie na aplikacje Windows

Wątpię, czy 10% kodu pisanego w C# jest aplikacjami pod Windowsa.

Keraj napisał(a)

Nieprzenośność kodu na inne platformy niż Windows

A kto by się paroma hobbystami przejmował? ;P
A C++ jest przenośny? [rotfl]

flamer napisał(a)

Różnica jest taka, że C# jest dla dziewczynek a C++ dla prawdziwych mężczyzn :]

Drelichowe spodnie, flanelowa koszula, w kieszeni paczka Fajrantów. W jednej ręce łopata, a w drugiej podręcznik C++.
To prawdziwy mężczyzna na miarę naszych możliwości. My tym <ort>mężczyzną </ort>otwieramy oczy niedowiarkom! Mówimy: to jest nasz mężczyzna, przez nas zrobiony, i to nie jest nasze ostatnie słowo!

deus. napisał(a)

@Fanael, bloki unsafe to odpowiednik asm z C++. 'Czysty' C# to C# bez unsafe, tak jak 'czysty' C++ == C++ bez asm.

Ale co to kogo obchodzi? ;>
Masz *, masz bezpośredni dostęp do pamięci - tak to działa. A jak to jest realizowane pod spodem, to szczegóły techniczne.

@Robster - C to skończony i przemyślany język strukturalny, który pozwala na w miarę niskopoziomowe programowanie ale jednocześnie jest bardziej zrozumiały dla programisty niż asembler.
C++ to takie nie wiadomo co, niby powstałe na bazie C, niby obiektowe, niby nie, niby ma masę wspaniałych mechanizmów, ale zazwyczaj inne języki mają je lepiej zrealizowane. Utrzymuje popularność zgodnie z Pierwszym Prawem Gospodarki Socjalistycznej - najbardziej trwałe są prowizorki.
C# to język będący pod względem składni i mechanizmów miksem Javy, C, Delphi i pewno paru innych. Został wymyślony jako flagowy język dla microsoftowej platformy .NET, jest obiektowy i ma sporo różnych mechanizmów pozwalających skupić się programiście na rozwiązywaniu problemu, a nie żmudnym instruowaniu komputera.

0

somekind dzięki za rozwiniętą odpowiedź :D

Ostatnio bawię się niecow Asembelrze i strasznie brakuje mi tam IF, ciężko się przenieść na skoki warunkowe gdy cały czas się siedziało w C++, PHP i Delphi :/

0
Robster napisał(a)

Ostatnio bawię się niecow Asembelrze i strasznie brakuje mi tam IF, ciężko się przenieść na skoki warunkowe gdy cały czas się siedziało w C++, PHP i Delphi :/

Yyy... w czym problem? Skoki warunkowe to właśnie if - jcc, gdzie cc to warunek mniejszości, większości, równości etc. Wcześniej wykonuje się porównanie/regularną operację. Akurat skoki warunkowe w asm dają większą swobodę niż zwykłe ify w HLL.

0

Różnica jak dla mnie jest i ciężko mi się na to przerzucić. Cały czas mam w głowie ten IF i ciężko jest mi się przerzucić na skoki. Według mnie C jest wiele łatwiejszy niż Asembler, niemniej dla ludzi którzy siedzą już jakiś czas w Aseblerze, jest pewnie na odwrót.

0

Może dlatego, że assembler nie jest przeznaczony do takiego sobie klepania... I nie narzekaj, x86 jest banalny w porównaniu z tym co np. na Itanium masz.

0

Poza tym w C# 3.0 są pewne nowości jak choćby typy anonimowe czy rachunek lambda, które nie występują w C++ i w Javie.

Typy/klasy anonimowe to akurat w Javie są od więcej niż 10 lat. C# miał delegaty i teraz chyba zauważyli, że klasy anonimowe Javy to jednak coś więcej. Klasy anonimowe są właśnie obiektowym odpowiednikiem rachunku lambda w językach funkcyjnych.

Dorzucanie wyrażeń lambda do języka obiektowego, który już odniósł sukces IMHO raczej skończy się źle. C# coraz bardziej przypomina C++, nie żeby był podobny składniowo, tylko że nabrał kupę mechanizmów z różnych języków, które często wzajemnie sobie przeczą. I dorzucają te mechanizmy po kolei z każdą nową wersją języka, starając się zachować w miarę wsteczną kompatybilność. Czyli znowu powoli powstaje takie nie wiadomo co, gdzie do tej samej rzeczy masz kilka mechanizmów. Java niestety idzie w tym samym kierunku (dodają lambdy w siódemce). To ma być język do budowania DSLi (patrz: LINQ), czy język ogólnego przeznaczenia łatwy do nauczenia się przez przeciętnego programisę? Jeśli to pierwsze, to są lepsze języki (Scala czy nawet F#), jeśli to drugie, też (Java <= 6; a nawet <= 1.4).

Skoro są lambda-wyrażenia i programowanie funkcyjne, to jaki sens używać wtedy takiej koślawej hybrydy obiektowo-funkcyjnej jak można użyć języka, który został zaprojektowany od początku jako obiektowo-funkcyjny?
Scala jest lepiej zaprojektowana od obu z nich a zarazem oferuje znacznie więcej (i większy fun z programowania).

0
Krolik napisał(a)

Scala jest lepiej zaprojektowana od obu z nich a zarazem oferuje znacznie więcej (i większy fun z programowania).

Tja, i oddzielne klasy reprezentujące n-elementowe krotki - Tuple0, Tuple1, Tuple2, Tuple3, Tuple4, Tuple5, Tuple6, Tuple7, Tuple8, Tuple9, Tuple10, Tuple11, Tuple12, Tuple13, Tuple14, Tuple15, Tuple16, Tuple17, Tuple18, Tuple19, Tuple20, Tuple21, Tuple22 czy tak samo oddzielne klasy reprezentujące funkcje o n-argumentach Function0, Function1, Function2, Function3, Function4, Function5, Function6, Function7, Function8, Function9, Function10, Function11, Function12, Function13, Function14, Function15, Function16, Function17, Function18, Function19, Function20, Function21, Function22.

Wspaniały design języka...

0

A przepraszam, Tuple0 nie ma, co znacznie poprawia moją ocenę.

0

Robster - od tego są makra .if w takim fasmie/masmie. Ręczne pisanie porównań ma sens tylko jak chcemy maksymalnie zoptymalizować kod w danym miejscu...
Pisanie w assemblerze sensu oczywiście nie ma, ale zakładam, że się po prostu uczysz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1