Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

różnice między c++ i c#

0 views
Skip to first unread message

wodzik

unread,
Jun 15, 2008, 6:17:27 AM6/15/08
to
szukam czegos na temat roznic w c# i c++. troche szukalem i wyszperalem,
ze w c# klasy sa alokowan na stercie, a struktury na stosie. tak samo
lokalne typy wbudowane tez alokowane sa na stosie. nie moge natomiast
wyszperac jak wyglada to w c++. pozatym nie calkiem wiem co w c# jest
struktura, a co jest klasa. wydaje mi sie, ze w c# wszystki typy
wbudowane takie jak string czy int sa strukturami. pozatym w c#
strutkury moga miec metody, ale nie moga dziedziczyc i byc dziedziczone,
poza interfejsami, ktore moga byc przez nie dziedziczone. w c++
struktury nie moga posiadac wlasnych metod i nie moga dziedziczyc, chyba
ze czegos nie doczytalem. jedna z wazniejszych roznic jest to, ze w c#
nie mozna dziedziczyc z kilku klas, ale z interfejsow juz tak. kolejna
sprawe ktora bym chcial wyjasnic jest preprocesow w c#. gdzies czytalem,
ze w c# nie ma czegos takiego, ale na innej stronie znalazlem przyklady
z #define. czy ktos sie moze interesuje jak wyglada to w c#. bo w sumie
cos takiego jak derektywy preprocesora widzialem jedynie w kodzie
pokazujacym ich wykorzystanie. w zadnym innym programie w c# nie
widzialem czegos takiego (nie to zebym widzial przesanie duzo kodow w
c#, ale w c++ uzywa sie tego w wiekszosci kodow i wcale nie mowie tu o
include). kolejna sprawa ktora zauwazylem. w c# dziala mi kod:
try
{
fsInput = new FileStream (szSrcFile, FileMode.Open, FileAccess.Read);
}
catch
{
Console.Write("Nie ma pliku: ");
Console.Write(szSrcFile);
Console.Write("\n");
return;
}
w c++ taki kod nie zadziala i nie calkiem rozumiem dlaczego w c# dziala.

troche sie rozpisalem i troche roznic sam nawet wypisalem, ale to dla
tego zeby pokazac mi o jakie roznice mi chodzi i zeby zweryfikowac
poprawnosc swojej wiedzy. takiego samego posta wysylam tez na pl.comp.lang.c

karol

unread,
Jun 15, 2008, 5:56:44 PM6/15/08
to
wodzik pisze:

> szukam czegos na temat roznic w c# i c++.

Nie szukaj związków. Poza składnią to c# nie jest następcą c++. To jest
odrębny język wywodzący się z c++. Bliżej c# do javy niż c++.

> troche szukalem i wyszperalem,
> ze w c# klasy sa alokowan na stercie, a struktury na stosie. tak samo
> lokalne typy wbudowane tez alokowane sa na stosie. nie moge natomiast
> wyszperac jak wyglada to w c++. pozatym nie calkiem wiem co w c# jest
> struktura, a co jest klasa.

Klasą jest to co zdefiniujesz przy użyciu class a strukturą przy użyciu
struct.

> wydaje mi sie, ze w c# wszystki typy
> wbudowane takie jak string czy int sa strukturami. pozatym w c#
> strutkury moga miec metody, ale nie moga dziedziczyc i byc dziedziczone,
> poza interfejsami, ktore moga byc przez nie dziedziczone.

Strukturą w c# powinno być wszystko co jest małe i powinno być szybkie.
I o ile dobrze pamiętam struktury są przekazywane przez kopiowanie a
klasy przez wskaźnik.

> w c++
> struktury nie moga posiadac wlasnych metod i nie moga dziedziczyc, chyba
> ze czegos nie doczytalem.

O ile pamiętam to w c++ struktura od klasy różni się tylko domyślnym
modyfikatorem dostępu do składowych a poza tym to samo co klasa.

> jedna z wazniejszych roznic jest to, ze w c#
> nie mozna dziedziczyc z kilku klas, ale z interfejsow juz tak.

Zgadza się.

kolejna
> sprawe ktora bym chcial wyjasnic jest preprocesow w c#. gdzies czytalem,
> ze w c# nie ma czegos takiego, ale na innej stronie znalazlem przyklady
> z #define. czy ktos sie moze interesuje jak wyglada to w c#. bo w sumie
> cos takiego jak derektywy preprocesora widzialem jedynie w kodzie
> pokazujacym ich wykorzystanie. w zadnym innym programie w c# nie
> widzialem czegos takiego (nie to zebym widzial przesanie duzo kodow w
> c#, ale w c++ uzywa sie tego w wiekszosci kodow i wcale nie mowie tu o
> include).

Tu masz więcej o dyrektywach preprocesora c#:
http://msdn.microsoft.com/en-us/library/ed8yd1ha%28VS.71%29.aspx
W c# nie napiszesz funkcji w preprocesorze tak jak to mogłeś w c++ (jak
ja tego nie lubiłem, mało czytelne).
Tu preprocesor służy na przykład do włączenie pewnych fragmentów kodu w
zależności o zdefiniowanych symboli.Czyli na przykład w wersji do
klienta wyłączasz cały kod debugujący jedną dyrektywą, na przykład
#define NO_DEBUG. A nie wycinasz mozolnie w edytorze :) o ile oczywiście
użyłeś odpowiednio #if i #endif

> kolejna sprawa ktora zauwazylem. w c# dziala mi kod:
> try
> {
> fsInput = new FileStream (szSrcFile, FileMode.Open, FileAccess.Read);
> }
> catch
> {
> Console.Write("Nie ma pliku: ");
> Console.Write(szSrcFile);
> Console.Write("\n");
> return;
> }
> w c++ taki kod nie zadziala i nie calkiem rozumiem dlaczego w c# dziala.

Tu masz więcej o wyjątkach:
http://msdn.microsoft.com/en-us/library/0yd65esw(VS.71).aspx
Twój kod zawiera błąd logiczny. Puste catch łapie wszystkie wyjątki.
Więc nie tylko brak pliku ale również brak uprawnień i inne więc nie
możesz w bloku catch założyć że plik nie istnieje.

> troche sie rozpisalem i troche roznic sam nawet wypisalem, ale to dla
> tego zeby pokazac mi o jakie roznice mi chodzi i zeby zweryfikowac
> poprawnosc swojej wiedzy. takiego samego posta wysylam tez na
> pl.comp.lang.c

Główną i największą różnicą między tymi językami jest to że c# jest
kompilowany do kodu pośredniego i dopiero w momencie uruchomienia
przekształcany na kod natywny a także to że kod c# jest kontrolowany
przez środowisko i jeśli nie ma uprawnień pewne czynności nie zostaną
wykonane.

--
Pozdrawiam
Karol

wodzik

unread,
Jun 16, 2008, 8:48:27 AM6/16/08
to
karol pisze:

> wodzik pisze:
>> szukam czegos na temat roznic w c# i c++.
>
> Nie szukaj związków. Poza składnią to c# nie jest następcą c++. To jest
> odrębny język wywodzący się z c++. Bliżej c# do javy niż c++.

no niestety pan od pradygmatow i jezykow programowania takiej odpowiedzi
raczej nie przyjmie ;]

>> troche szukalem i wyszperalem, ze w c# klasy sa alokowan na stercie, a
>> struktury na stosie. tak samo lokalne typy wbudowane tez alokowane sa
>> na stosie. nie moge natomiast wyszperac jak wyglada to w c++. pozatym
>> nie calkiem wiem co w c# jest struktura, a co jest klasa.
>
> Klasą jest to co zdefiniujesz przy użyciu class a strukturą przy użyciu
> struct.

a typy wbudowane? sa klasami czy strukturami?

>> wydaje mi sie, ze w c# wszystki typy wbudowane takie jak string czy
>> int sa strukturami. pozatym w c# strutkury moga miec metody, ale nie
>> moga dziedziczyc i byc dziedziczone, poza interfejsami, ktore moga byc
>> przez nie dziedziczone.
>
> Strukturą w c# powinno być wszystko co jest małe i powinno być szybkie.
> I o ile dobrze pamiętam struktury są przekazywane przez kopiowanie a
> klasy przez wskaźnik.

to sie zgadza

>> w c++ struktury nie moga posiadac wlasnych metod i nie moga
>> dziedziczyc, chyba ze czegos nie doczytalem.
>
> O ile pamiętam to w c++ struktura od klasy różni się tylko domyślnym
> modyfikatorem dostępu do składowych a poza tym to samo co klasa.

tego nie wiedzialem. grebosz raczej slabo opisuje struktury w c++

>> jedna z wazniejszych roznic jest to, ze w c# nie mozna dziedziczyc z
>> kilku klas, ale z interfejsow juz tak.
>
> Zgadza się.
>
> kolejna
>> sprawe ktora bym chcial wyjasnic jest preprocesow w c#. gdzies
>> czytalem, ze w c# nie ma czegos takiego, ale na innej stronie
>> znalazlem przyklady z #define. czy ktos sie moze interesuje jak
>> wyglada to w c#. bo w sumie cos takiego jak derektywy preprocesora
>> widzialem jedynie w kodzie pokazujacym ich wykorzystanie. w zadnym
>> innym programie w c# nie widzialem czegos takiego (nie to zebym
>> widzial przesanie duzo kodow w c#, ale w c++ uzywa sie tego w
>> wiekszosci kodow i wcale nie mowie tu o include).
>
> Tu masz więcej o dyrektywach preprocesora c#:
> http://msdn.microsoft.com/en-us/library/ed8yd1ha%28VS.71%29.aspx
> W c# nie napiszesz funkcji w preprocesorze tak jak to mogłeś w c++ (jak
> ja tego nie lubiłem, mało czytelne).

ja to bardzo lubie. jak chce policzyc wartosc bezwzgledna a nie chce mi
sie bawic z math pisze mala funkcje i jest git

to tez juz wiem. calkiem ciemny z c# nie jestem ;]

Grzegorz Gruza

unread,
Jun 16, 2008, 9:02:58 AM6/16/08
to
wodzik pisze:

> karol pisze:
>> wodzik pisze:
>>> szukam czegos na temat roznic w c# i c++.
>>
>> Nie szukaj związków. Poza składnią to c# nie jest następcą c++. To
>> jest odrębny język wywodzący się z c++. Bliżej c# do javy niż c++.
>
> no niestety pan od pradygmatow i jezykow programowania takiej odpowiedzi
> raczej nie przyjmie ;]
>
>>> troche szukalem i wyszperalem, ze w c# klasy sa alokowan na stercie,
>>> a struktury na stosie. tak samo lokalne typy wbudowane tez alokowane
>>> sa na stosie. nie moge natomiast wyszperac jak wyglada to w c++.
>>> pozatym nie calkiem wiem co w c# jest struktura, a co jest klasa.
>>
>> Klasą jest to co zdefiniujesz przy użyciu class a strukturą przy
>> użyciu struct.
>
> a typy wbudowane? sa klasami czy strukturami?
>
I jednym i drugim.

--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!

wodzik

unread,
Jun 16, 2008, 9:19:44 AM6/16/08
to
Grzegorz Gruza pisze:
mozesz rozwinac?

karol

unread,
Jun 16, 2008, 10:07:58 AM6/16/08
to
wodzik pisze:
[...]

>>>>
>>>> Klasą jest to co zdefiniujesz przy użyciu class a strukturą przy
>>>> użyciu struct.
>>>
>>> a typy wbudowane? sa klasami czy strukturami?
>>>
>> I jednym i drugim.
>>
> mozesz rozwinac?

Część jest strukturami część klasami.
Generalnie msdn Twoim przyjacielem:
http://msdn.microsoft.com/en-us/library/3ewxz6et%28VS.80%29.aspx

--
Pozdrawiam
Karol

Wiktor Zychla

unread,
Jun 16, 2008, 10:32:27 AM6/16/08
to
> ja to bardzo lubie. jak chce policzyc wartosc bezwzgledna a nie chce mi

różnica jest taka, że makra C++ są zupełne w sensie Turinga, tzn. można
pisać programy dla preprocesora. oznacza to w szczególności, że
a) kompilacja może trwać dowolnie długo, a nawet
b) da się pisać takie programy, które rozkładają kompilator

dyrektywy preprocesora C# to garść przełączników kompilacji, nic więcej.

Wiktor Zychla

0 new messages