Багато хто, як правило, пише "C / C ++", ніби це одне і те ж. Хоча вони поділяють багато подібності, вони явно не однакові.
Але які насправді принципові відмінності між C і C ++? Чи є C ++ розширеною версією C, чи є функції в C, яких немає в C ++?
Багато хто, як правило, пише "C / C ++", ніби це одне і те ж. Хоча вони поділяють багато подібності, вони явно не однакові.
Але які насправді принципові відмінності між C і C ++? Чи є C ++ розширеною версією C, чи є функції в C, яких немає в C ++?
Відповіді:
Наступні моменти стосуються C ++:
C ++ був винайдений для управління складністю, з якою C не впорався. Наприклад, поширеною проблемою з C було те, що у вас можуть "закінчитися імена змінних" (що не слід сприймати буквально), оскільки не було капсулювання, просторів імен тощо.
Також у C немає винятків, тому обробка помилок дуже схильна до помилок, оскільки від користувача бібліотеки завжди перевіряти значення повернення функцій, тоді як, за винятком, розробник бібліотеки просто викидає виняток, який гарантує, що потік програми буде зупинений.
C ++ допомагає, будуючи конструктор init об'єктів, який автоматично викликається компілятором. На відміну від C структур, які потрібно ініціалізувати програмістом (звідси інша область, схильна до помилок).
Нарешті, існує багато інших переваг, на які рекламується OOP, такі як повторне використання об'єктів, а також загальні концепції, засновані на програмуванні, такі як шаблони та дженерики, які дозволяють повторно використовувати вихідний код тощо.
І ще багато інших речей, які б зайняли занадто багато мого часу, щоб перерахувати тут.
Загалом, все, що існує в C, підтримується в C ++. Очевидно навпаки абсолютно неправдиво.
Простіше кажучи, C ++ орієнтована на об'єкти (так, наприклад, у вас є класи), C - ні.
C ++ має булевий тип C89.
Вони різні мови. Вони просто поділяють більшу частину синтаксису.
_Bool
з bool
псевдонімом).
long long
тип даних, який ще не є частиною ISO C ++.
У C99 є кілька функцій, які не існують (принаймні в абсолютно однаковій формі) в C ++ (наприклад, гнучкі елементи масиву, масиви змінної довжини тощо)
C99 також багато додав до бібліотеки, якої немає у стандарті C ++ 98/03; більша частина цього була додана до C ++ 11, хоча.
Щодо базової орієнтації, C в основному підтримує структуроване процедурне програмування. C ++ підтримує це, а також об'єктно-орієнтоване програмування, загальне програмування та метапрограмування (проведення довільних обчислень під час компіляції). З C ++ 11 він додає декілька біт і фрагментів, які, принаймні, можуть бути помилково сприйняті і для підтримки функціонального програмування (наприклад, лямбда-вирази). C ++ 14 додав ще декілька, але більшість із них справді більше зручності, ніж будь-яка значна зміна орієнтації.
Особисто я вважаю, що шаблони є найбільш значущою особливістю, яку C ++ додає до C.
#define GENERATE_INTERFACE(T) T T##_func(T x);
; (тип) безпечне перевантаження / шаблони в C. Я погоджуюся з Томасом, що деструктори є набагато важливішою особливістю C відсутня. Але деструктори часто приховують важливий код. На мою думку, простори імен (область) - найважливіші.