Czy to prawda, że nie ma potrzeby uczenia się C, ponieważ C++ zawiera wszystko? [zamknięte]
Chodzę na zajęcia z programowania w C++ i profesor powiedział nam, że nie ma potrzeby uczyć się C, ponieważ C++ zawiera wszystko w C plus obiektowe funkcje. Jednak niektórzy inni powiedzieli mi, że niekoniecznie jest to prawdą. Czy ktoś może rzucić na to trochę światła?
11 answers
Przegląd:
Jest prawie prawdą, że C++ jest supersetem C, a twój profesor ma rację, że nie ma potrzeby uczyć się C oddzielnie.
C++ dodaje cały obiektowy aspekt, ogólny aspekt programowania, a także ma mniej ścisłe reguły(takie jak zmienne, które muszą być zadeklarowane u góry każdej funkcji). C++ zmienia definicję niektórych pojęć w C, takich jak struktury, chociaż nadal w sposób superset.
Przykłady dlaczego nie jest to ścisły superset:
Ten artykuł w Wikipedii ma kilka dobrych przykładów takich różnic:
Jedną z najczęściej spotykanych różnic jest że C umożliwia konwersję z void* do innych typów wskaźników, ale C++ nie. Tak więc, następujące jest ważne C kod:
int *i = malloc(sizeof(int) * 5);
... ale żeby to działało zarówno w C jak i C++ trzeba by użyć jawnego Obsada:
int *i = (int *) malloc(sizeof(int) * 5)
Innym powszechnym problemem przenośności jest że C++ definiuje wiele nowe słowa kluczowe, takich jak nowa i klasy, które mogą być używane jako identyfikatory (np. zmienna nazwy) w programie C.
Ten artykuł ma również inne różnice:
Kompilatory C++ zabraniają goto krzyżowania inicjalizacji, tak jak w następującym kodzie C99:
void fn(void)
{
goto flack;
int i = 1;
flack:
;
}
Czego powinieneś się najpierw nauczyć?
Powinieneś najpierw nauczyć się C++, nie dlatego, że nauczenie się C najpierw cię boli, nie dlatego, że będziesz musiał się oduczyć cokolwiek (nie będziesz), ale dlatego, że nie ma korzyści w nauce C najpierw. W końcu i tak dowiesz się wszystkiego o C, ponieważ jest on mniej lub bardziej zawarty w C++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:35:06
Chociaż prawdą jest, że C++ został zaprojektowany w celu zachowania dużego stopnia kompatybilności z C i podzbiór tego, czego nauczysz się w C++, będzie miał zastosowanie do C, sposób myślenia jest zupełnie inny. Programowanie C++ za pomocą Boost lub STL jest zupełnie innym doświadczeniem niż programowanie w C.
Istniał termin sztuki zwany używaniem C++ jako lepszego C. oznaczało to użycie niektórych funkcji języka C++ i narzędzi ułatwiających programowanie w C (np. deklarowanie zmiennej indeksowej pętli for wewnątrz for oświadczenie). Ale teraz, współczesny rozwój C++ wydaje się bardzo różny od C innych niż duża część składni i w tych przypadkach dziedzictwo C często wydaje się być ciężarem, a nie korzyścią.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 23:29:41
Może być prawdą, że nie musisz uczyć się składni C, jeśli znasz składnię C++, ale musisz dowiedzieć się, jak różne są praktyki kodowania w C niż w C++.
Więc twój profesor nie miał 100% racji.W C nie masz klas, aby ułożyć swój kod w Moduły logiczne i nie masz polimorfizmu C++. Jednak nadal musisz jakoś osiągnąć te cele.
chociaż składnia C jest w pewnym stopniu podzbiorem C++, programowanie W C jest nie jest podzbiorem programowania w C++. jest zupełnie inaczej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 05:14:44
Tak i nie.
Jak już odpowiedzieli inni, język C++ jest supersetem języka C, z kilkoma małymi wyjątkami, na przykład, że sizeof ('x') daje inną wartość.
Ale myślę, że nie zostało jasno powiedziane, że jeśli chodzi o użycie tych dwóch języków, C++ nie jest supersetem, ale raczej innym. C++ zawiera nowe (można je omówić, jeśli są lepsze) sposoby robienia podstawowych rzeczy, takich jak pisanie do ekranu. Stare Sposoby C nadal istnieją, ale zazwyczaj używasz nowych sposobów. Oznacza to, że prosty program "hello world" wygląda inaczej w C i w C++. Tak więc nie jest tak naprawdę prawdą, że proste rzeczy są takie same w C i C++, a następnie po prostu dodać bardziej zaawansowane rzeczy, takie jak wsparcie dla programowania obiektowego, w C++.
Więc jeśli nauczyłeś się C++, będziesz musiał wiele się nauczyć, zanim będziesz mógł programować w C. (Cóż, możliwe jest nauczanie C++ jako rozszerzenia do C, nadal używając printf i malloc zamiast iostreams i new, a potem dodawanie klas i innych rzeczy C++, ale ten sposób korzystania z C++ jest generalnie marny.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 06:20:16
No C++ nie jest tak naprawdę superset C. Możesz sprawdzić ten artykuł, aby uzyskać bardziej obszerną listę różnic, jeśli jesteś zainteresowany: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:16:07
Największym "gotcha" jest typowanie -- C++ jest znacznie silniej typowane niż C, a preferowane metody rozwiązywania tego w C++ są po prostu niedostępne w C. mianowicie, można po cichu rzucać między typami W C( szczególnie typy wskaźników), ale nie w C++. C++ wysoce zaleca używanie metod static_cast/reinterpret_cast/const_cast do rozwiązywania tych problemów.
Co ważniejsze, jeśli nauczysz się składni i manieryzmów C++, będziesz prawdopodobnie trudno jest sobie poradzić z C (niektórzy mogą powiedzieć, że jest to dobre; i wolę C++ osobiście, ale czasami po prostu nie jest to opcja, lub musisz poradzić sobie ze starszym kodem, który jest w C, a nie C++). W C++ używanie std::string i std:: vector lub innych kolekcji jest po prostu lepsze ).
Z pewnością można nauczyć się C++, a potem poznać różnice między C i C++ i być zdolnym do programowania w obu. Ale różnice są znacznie więcej niż tylko Głębokie na skórę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:29:48
Prawdą jest, że dla większości celów, C++ zawiera wszystko, co C robi. Prawnicy języka szybko zwrócą uwagę, że istnieje kilka bardzo szczególnych przypadków, które są poprawne C, ale nie poprawne C++.
Jednym z takich przykładów może być deklaracja C
int virtual;
Który deklaruje liczbę całkowitą o nazwie "virtual". Ponieważ "virtual" jest słowem kluczowym w C++, nie jest to poprawne C++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:11:30
Istnieje duży wspólny rdzeń C (szczególnie C89) i C++, ale są z pewnością obszary różnic między C i C++. Oczywiście, C++ ma wszystkie funkcje obiektowe, plus ogólne programowanie, Plus wyjątki, Plus przestrzenie nazw, których C nie ma. Jednak istnieją również funkcje, które nie są w C++, takie jak wsparcie dla (blisko archaicznej) notacji nie-prototypowej do deklarowania i definiowania funkcji. W szczególności znaczenie następującej deklaracji funkcji jest inny w C i C++:
extern void function();
W C++ jest to funkcja, która nie zwraca żadnej wartości i nie pobiera żadnych parametrów (i dlatego jest wywoływana wyłącznie ze względu na efekty uboczne, niezależnie od tego, czym są). W C jest to funkcja, która nie zwraca żadnej wartości, ale dla której nie ma informacji o liście argumentów. C nadal nie wymaga deklaracji w zakresie przed wywołaniem funkcji( ogólnie; musisz mieć deklarację w zakresie, jeśli funkcja pobiera zmienną listę argumentów, więc jest krytyczne dla #include <stdio.h>
przed użyciem printf()
, itp.).
Istnieją również różnice:
sizeof('c')
W C++, odpowiedź wynosi 1; W C, odpowiedź jest zwykle 4 (32-bitowe systemy z 8-bitowymi znakami) lub nawet 8 (64-bitowe systemy z 64-bitowym int).
Ogólnie można pisać kod, który będzie kompilowany zarówno pod kompilatorami C jak i C++ bez większych trudności - większość mojego kodu robi to cały czas. Wyjątki są albo wynikiem niedbalstwa z mojej strony, albo dlatego, że świadomie wykorzystuje dobre cechy C99, które nie są w C++ 98, takie jak wyznaczone inicjalizatory lub long long
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:29:27
Stroustrup on Sam radzi przeciw nauka C najpierw. Jednak z drugiej strony, On (i wielu innych z jego pokolenia) udało mu się zostać guru C++ zaczynając od C. {]}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-21 09:28:24
Ja osobiście nie zgadzam się z Twoim profesorem.
Ogólnie Rzecz Biorąc, C++ jest oparty na C i w tym "sensie" zawiera go i rozszerza.
Jednakże, ponieważ tradycyjnie ludzie uczyli się C, a dopiero potem rozszerzeń C++, stwierdzenie twojego profesora jest błędne, ponieważ aby poprawnie używać C++ trzeba by opanować C++. Jest możliwe, że przy nauczaniu czegoś, twój profesor lub podręcznik nie wspomni dokładnie tego, z czego język.
Ponadto ważne jest, aby zrozumieć, że pomimo podobieństw, nie każdy program C działa w ten sam sposób pod C++. Na przykład, struktury C są różnie interpretowane (jako klasy ze wszystkim, co publiczne) przez kompilator C++.
Kiedy uczę, najpierw uczę rdzeń C, a potem idę do c++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-28 03:12:52
Jeśli któryś z uczniów w klasie zamierza zostać inżynierami oprogramowania wbudowanego, może nie mieć innego wyboru niż programować w języku C (zobacz to pytanie i to pytanie , między innymi).
Oczywiście, po nauczeniu się C++, może to być dla nich mniej przejścia niż zaczynanie od zera - ale to nadal sprawia, że stwierdzenie twojego profesora jest nieprawdziwe!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:13