AnteriorPosterior

10. Otras diferencias entre C y C++

  Curso: Introducción a C++, por Nacho Cabanes (antiguo)

10. Otras diferencias entre C y C++


Hay muuuchos temas de Programación Orientada a Objetos que no hemos tratado, por ejemplo: sobrecarga de operadores (p.ej., redefinir el operador + para añadir texto a una ventana), herencia múltiple (que una clase herede métodos y atributos de más de un "padre"), etc. Algunos de estos temas "más avanzados" los veremos más adelante. Comentemos ahora otros aspectos más generales...


Primero repasemos alguna de las diferencias que ya hemos comentado.

  • Orientado a objetos, con todos los cambios que ello implica, y en los que no voy a insistir.
  • Comentarios hasta fin de línea, que se marcan con una doble barra //.


Y mencionemos alguna más:

  • Declaraciones después de instrucciones. En C hay que declarar las variables locales al comienzo de una función; en C++ se pueden declarar después de sentencias ejecutables, lo que permite incluso declararlas justo en el momento de usarlas, con órdenes como

for (int i=1; i<=10; i++)


  • Nuevas rutinas de acceso a pantalla y teclado: se lee del teclado con "cin >> variable" y se manda a pantalla con "cout << texto", como se muestra en el siguiente ejemplo:

#include <iostream.h> 
char nombre[40]; 
main() { 
  cout << "Teclea tu nombre\n"; 
  cin >> nombre; 
  cout << "Así que te llamas " << nombre << ", verdad?\n"; 
  return 0; 
}


  • Los struct y enum se tratan como tipos. Así, se pueden definir variables de tipo "enum" y "struct" sin necesidad de repetir las palabras "enum" y "struct":

struct Complejo { float mod, arg }; 
struct Complejo c1;   // esto es lo que habría que hacer en C 
Complejo c1;          // esto es válido en C++
enum Color { rojo, verde, azul }; 
enum Color unColor;   // esto es lo que habría que hacer en C 
Color unColor;        // esto es válido en C++ 


  • Se pueden dar valores por defecto a los parámetros de una función:

void Escribe(char *texto, int x=30, int y=10); 
Escribe(saludo, 20, 5);  // Válido, escribe en (20,5) 
Escribe(saludo, 20);     // Válido, escribe en (20,10) 
Escribe(saludo);         // Válido, escribe en (30,10) 
Escribe();               // No válido: no hay valor para "texto"

La restricción es que los valores por defecto deben corresponder a los parámetros que aparecen más a la derecha.


  • Dispone de los operadores new y delete para reservar memoria dinámica, similares a malloc y free.

Por ejemplo, para crear dinámicamente una cadena de texto de 80 letras se haría

texto = new char[80];  // en vez de = (char *) malloc (80*sizeof(char)) 

y para eliminarla

delete texto;


  • Operador :: para indicar el ámbito. Lo hemos utilizado ya para el desarrollo de los métodos de una clase, pero también tiene otros usos, como puede ser el de acceder a una variable global cuando existe una variable local con el mismo nombre:

int i = 5; 
void funcion () { 
  int i = 4; 
  cout << "La variable local vale " << i; 
  cout << "La variable global vale " << ::i; 
}


  • Se pueden declarar referencias:

int i = 0; 
int &i2 = i;      // es un alias para i 
i2 = 4;           // tiene el mismo efecto que i = 4

También se pueden pasar parámetros por referencia, que es más legible que pasar parámetros que sean punteros. Por ejemplo, para crear una función que calcule el triple de un número, lo podemos hacer de 3 formas:

Primera forma, pasando valores:

    int tripleA( int n )   // Desarrollo de la función 
    { return n * 3; } 
    int x, i = 5; 
    x = tripleA (i);       // Ahora x vale 15

Segunda forma, como puntero, pasando direcciones:

    void tripleB( int *n )   // Desarrollo de la función 
    { *n = (*n) * 3; } 
    int x, i = 5; 
    x = i;                   // Ahora x vale 5 
    tripleB (&x);            // Ahora x vale 15

Tercera forma, empleando referencias, más legible:

    int tripleC( int& n )   // Desarrollo de la función 
    { n = n * 3; } 
    int x, i = 5; 
    x = i;                  // Ahora x vale 5 
    tripleC (x);            // Ahora x vale 15


Y todavía más, pero como introducción es suficiente...

Actualizado el: 01-06-2006 15:19

AnteriorPosterior