Modelo:Linguaxes de programación/Diferencias entre C e C++
C++ baseouse en C e conserva unha gran parte da súa funcionalidade, pero non son linguaxes completamente compatibles a nivel de código. Existen algunhas diferencias fundamentais que cómpre coñecer:
- C permite maior liberdade á hora de “xogar cos bytes” —o que pode resultar tan beneficioso como prexudicial—.
- Seguen paradigmas de programación distintos: C é unha linguaxe estruturada, mentres que C++ está orientada a obxectos.
- C non ten un tipo booleano ou “lóxico” —cuxo valor pode ser «certo» ou «falso»— nin un para cadeas de texto. Porén, os tipos booleanos poden imitarse mediante un tipo «enum» e trabállase coas cadeas de texto mediante matrices de caracteres.
- Aínda que en C adoita facerse por convención, en C++ é obrigatorio que as funcións se declaren antes de empregarse.
- En C hai que engadir a palabra clave
enum
oustruct
ao declarar unha variable do tipo dunha enumeración ou estrutura previamente definida, mentres que en C++ emprégase directamente o nome da estrutura.
- A biblioteca estándar de funcións de C++ é moito máis completa, e permite empregar tamén a de C.
- En C++ as funcións devolven
0
de maneira predeterminada, mentres que en C debe especificarse sempre.
- C++ necesita prototipos.
- En C, unha función da forma
f()
pode recibir un número calquera de parámetros de calquera tipo, mentres que en C++ non podería recibir ningún parámetro.
- En C,
sizeof('x')
equivale asizeof(int)
, mentres que en C++ equivale asizeof(char)
.
Asignación implícita dun tipo void*
[editar]En C++ non se pode facer unha asignación implícita dun tipo void*
a outro tipo calquera. Por exemplo, a seguinte liña de código é completamente correcta en C (de feito, é probablemente o mellor modo de escribila), pero non compilaría en C++:
int *x = malloc(sizaof(int) * 10);
Memoria dinámica
[editar]En C hai unha única función principal de asignación de memoria, malloc()
, que se emprega para asignar memoria tanto a elementos individuais como a matrices, e a memoria sempre se libera mediante a función free()
.
Porén, en C++ a asignación de memoria para as matrices é algo distinta da asignación de memoria para elementos individuais. Para as primeiras empréganse os operadores new[]
e delete[]
, mentres que para os segundos new
e delete
.