te válida //la sentencia que se usa en este ejemplo.

diferencias con C

Se pueden programar en C++ como se haría en C, salvo por algunos matices que vamos a expresar aquí , estos matices son cosas puntuales que facilitan la programación.

  1. Más palabras reservadas (estan todas las de C pero se suman otras)
  2. Un nuevo tipo de datos nativos bool es un dato binario que ocupa un bit (recordemos que antes se hacía esto con un entero si era 0 o no, también se podía hacer con un char)
  3. Las variables enum Son tipos de datos, no algo que se identifica con un entero (int). Ahora para declarar una variable no hay que especificar enum antes.
    									            enum semana {lunes,martes,miercoles,jueves,viernes,sabado,domingo}  //declaración de la variable enum
    									            enum semana dia = Lunes; // esto es en C
    									            semana dia2 = martes;  // esto es en C++
    									        
  4. Las variables struct sun un tipo de dato como ocurre con enum y no es necesario utilizar struct antes de cada declaración.
  5. Se añaden las variables class prácticamente son lo mismo que struct, solo se diferencian en matices y prioridades , pero esta palabra es posiblemente la que más defina a C++ de hecho se suele referirse a el como un C con clases.
  6. En C++ las variables >NO tienen que declararse al principio del bloque.

    Existen desde que se declaran hasta el final del bloque.

    Se pueden declarar variables en un for o dentro de el

    									                for (int i=0 ,float t; i<10 ; i++){ // se declaran dos variables que tienen validez mientras dure el for
    									                    float t_invertido; // esta variable durara solo mientras dure la iteración
    									                    t=t+t_invertido;  // t sumará las distintas t_invertidos que aparezca pero desaparecerá cuando se termine el for
    									                }       // hay que decir que este programa es una mierda y cabe destacar que no se han inicializado ni t, ni t_invertido de manera que perderse es lo mejor que le puede pasar.
    									            

  7. scope o visibilidad de una variable .
    1. Si está fuera de un bloque es una variable global : Se puede ver desde cualquier parte del fichero.
    2. Si la variable se declara como extern entonces es visible desde cualquier fichero, extern int proceso;// una variable que cuenta el estado del proceso.
    3. Una variable se puede ocultar por otra , si se declara con igual nombre otra en un bloque más interno.
      									                int main (){
      									                    int x,y,z; // estas variables están definidas para durar toda la función main
      									                        {
      									                            int x;  // esta variable solo dura mientras dure el programa pero desde que la declaro hasta que termine su bloque será esta a la que me esté refiriendo.
      									                        }
      									                return 0;}
      									            
      Las variables más internas siempre tienen referencia y apantallan a las más externas
    4. Exite el operador Resolución de visibilidad :: ::x=3 en el ejemplo interior haría que la variable se refiriera a la x declarada junto a la y y la z
  8. En C el valor de retorno por defecto en una función es int, en C++ es obligatorio especificarlo (teóricamente daría error pero esto es cosa del compilador ).
  9. Una variable const en C es una varible de solo lectura. en C++ esto es así si precisamos su referencia de lo contrario será introducida en una tabla de simbolos como si de un #define se tratase (esto hace que en el caso de no utilizarse no ocupe memoria en ram).
    									            Const int dim=3;
    									            float punto[dim]; // en C esto daría un problema ya que no puedo declarar una variable de este modo pero en C++ no porque como no uso la referencia de dim esto no es una variable.
    									                                // es un simbolo en cimpilacion
    									        
  10. Otra forma de hacer cast
    									            a= (int) a/b; //en C/C++
    									            a= (int) (a/b); // en C/C++
    									            a= int (a/b); // en C
    									        
    En C se precisa que el cast esté entre paréntesis y hace referencia a lo que va a recibir el igual, en C++ el cast se puede hacer sin paréntesis pero hay que tener en cuenta que va a hacer esto sobre el elemento que encuentre a la derecha, razón por la cual precisa el paréntesis en la operación, de lo contrario solo actuaría sobre la a y no sobre el resultado de la fracción.
  11. Los prototipos de las funciones son obligatorios. (esto es por causa de las comprobaciones debidas a la sobrecargas).
  12. La instrucción inline si una función se declara como inline , se le está pidiendo a la maquina que valore si esta función puede escribirse en linea (realizando una sustitución sobre la misma ejecución) esto hará que el código del programa ocupe más pero también que sea mucho más rápido en ejecución al no tener que crear copiar y luego borrar la pila.
      Una función nunca será considerada inline si:
    • Son recursivas
    • Tienen bucles
    • Saltos con go to
    La definición de una función inline se hace en los ficheros de encabezamiento.
  13. Nuevo tipo de variable referencia
    Las referencias hay que hacerlas en la inicialización y el valor es permanente.(no confundir con una indirección)
    									            int var1= 3;
    									            int &var2 = var1;
    									        
    tanto var1 como var2 hacen referencia a la misma variable da igual como las utilices y que modificaciones hagas
    No se pueden comparar referencias.
    No se pueden modificar las referencias.
    Si una referencia se declara como consto esta no se puede modificar usando esa referencia pero puede que si se pueda modificar usando la variable inicial
    									            int var1=3;
    									            const int &var2 = var1;
    									            // int &const var3=var1; // no tiene sentido las referencias siempre son constantes .
    									            var1=4; // permitido
    									            var2=5; // no permitido
    									
    									        
  14. Operadores new y delete
    Estos operadores vienen a solucionar tienen las funciones de calloc y malloc

    Tienen la ventaja de ser nativos

    new determina automáticamente el tipo de dato y su tamaño, no devuelve un punter a void (*void) con lo que se evita un cast

    Si new no encuentra memoria disponible devuelve 0.

    realloc es diferente pero puede utilizarse para redireccionar algo creado con new

    									
    									            int *puntero = NULL; // declaramos un puntero a entero con valor NULL (esto es porque no le tenemos asignada dirección).
    									            puntero = new int [10];  // reservamos memoria para 10 int y la dirección la ponemos en el puntero.
    									            float * plongitud = new float; // lo de antes se puede hacer en un solo paso y para un elemento en vez de para un vector
    									            // ahora para liberar memoria hay que tener en cuenta otra cosa más
    									            delete plongitud; // eliminar o borra o libera la memoria de este valor
    									            delete[] puntero; // para eliminar un vector es necesario poner entre corchetes la longitud del vector o por lo menos los corchetes.
    									            //En las primeras ediciones de C++ había que poner el valor "en este caso: delete[10] puntero;" pero en las actuales es perfectamente válida
    									            //la sentencia que se usa en este ejemplo.