IDEA DE C++

24.05.2013 20:15

fue creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL.

C++, por su parte, fue creado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos.

Así que C es el lenguaje original, mientras que C++ es una ampliación de C, por eso el ++.

A mi cuando me enseñaron a programar me dijeron que iba a aprender a programar en C++, pero en verdad me enseñaron únicamente C, así que muchos profesores en realidad no saben lo que es programar en C++. Veamos un hola mundo en los dos programas:

En C

1
2
3
4
5
6
7
#include<stdio.h>  
 
int main() 
{
        printf ("Hola Mundo");
        return 0;
}

En C++

1
2
3
4
5
6
7
8
9
#include<iostream>
 
using namespace std;
 
int main()
{
    cout << "Hola mundo";
    return 0; 
}

Para el tipo de programas que se estarán mostrando en este blog la diferencia más importante es la entrada y salida de datos. Así que veamos un ejemplo de entrada y salida de datos de cada programa:

En C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
 
int main()
{
    int radio;
    float area, perimetro;
 
    // SALIDA: mensaje un pantalla
    printf("Introduce el radio del circulo: ");
 
    //ENTRADA: recibir dato desde teclado
    scanf("%d", &radio);
 
    // calculos
    area = 3.1416 * radio * radio;
    perimetro = 3.1416 * radio * 2;
 
    //SALIDA: resultado en pantalla
    printf("El area es %.2f y el perimetro %.2f", area, perimetro);
    getch();
 
    return 0;
}

En C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;
 
int main()
{
    int radio;
    float area, perimetro;
 
    // SALIDA: mensaje un pantalla
    cout << "Introduce el radio del circulo: ";
 
    //ENTRADA: recibir dato desde teclado
    cin >> radio;
 
    // calculos
    area = 3.1416 * radio * radio;
    perimetro = 3.1416 * radio * 2;
 
    //SALIDA: resultado en pantalla
    cout << "El area es " << area << " y el perimetro " << perimetro;
    cin.get();cin.get();
 
    return 0;
}

Lo que noté al hacer estos dos programitas es que pedir un dato en C++ es mucho mucho más simple que en C. Sin embargo, el asunto de los << y >> puede llegar a ‘asustar’ a los recién iniciados en la programación.

Pedir un dato en C

scanf("modificador", &nombre de la variable);

Pedir un dato en C++

cin >> nombre de la variable;

Mostrar un dato en C

printf("Dato: modificador", nombre de la variable);

Mostrar un dato en C++

cout << "Dato: " << nombre de la variable;

Los modificadores son los siguientes: %d para int, %f para float, %s para string, %c para char.

Librerías en C++

Por simple convención las librerías en C terminan en ‘.h’ (punto hache). Todas las librerías de C sirven para C++, sin embargo, también por convención, se elimina la terminación ‘.h’ y mejor se agrega ‘c’ al principio.

Libreria en C Librería en C++

math.h cmath

string.h cstring

time.h ctime

etcetera.

El ‘namespace’

C como lenguaje tiene un conjunto de palabras reservadas, como por ejemplo: if, for, while, int, float, … C++ es una ampliación, por lo tanto tiene que agregar nuevas palabras reservadas. Éstas palabras reservadas están en un ‘namespace’ (espacio de nombres). En específico cout y cin están el namespace std (standard).

Si no declararamos que vamos a usar el namespace std (using namespace std;), cada vez que quisieramos usar cout, tendríamos que escribir std::cout.

Espero que a partir de ahora pueden identificar si un programa está en C o en C++. También espero estar publicando mis programas en ambos lenguajes a partir de ahora.

 

#define en C++, cómo sí y cómo no

El mayor objetivo de este post es darles a conocer una de las cosas que C++ permite hacer pero que nadie en su sano juicio debería de hacer. ¿Y para que se los enseño entonces? Pues para que si algún día lo ven en un código ajeno sepan qué pinch_ está pasando.

Bueno, antes que nada, #define sirve para dos cosas: definir una constante o crear un macro. Los macros pueden llegar a ser algo difícil de entender, ahora sólo veremos el asunto de las constantes. El asunto aquí es que si yo pongo (fuera del main) una línea así:

#define PI 3.14159265

…significa que cada vez que escribamos PI en nuestro programa, C++ lo interpretará como 3.14159265. Es una simple sustitución.

#define <aquí va el nombre> <después de un espacio va el valor>

Pero el asunto es que se puedes hacer algunas cosas bastantes feas con esta propiedad. Vean este programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
 
#define PI 3.14159265
#define NOF_CHAR 50
#define pause cin.get();cin.get();
#define ct cout
#define cn cin
#define false true
 
int main()
{
    char name[NOF_CHAR] = {0};
    ct << "Enter your name: ";
    cn >> name;
    ct << "Bye " << name << "." << endl;
    if(false)
        ct << "P.S. Pi = " << PI;
    pause
}

Tenemos 6 definiciones, ordenadas en su nivel de aceptabilidad:

  • #define PI 3.14159265 y #define NOF_CHAR 50, éstos ejemplifican el uso primario de #define: guardan un valor que es constante durante toda la ejecución del programa.
  • #define pause cin.get();cin.get();, ésta ya empieza a ser no aceptable pero podemos darla por buena porque nos ayuda a leer mejor nuestro código. Ya sabemos que al escribir cin.get();cin.get(); nuestro programa se pausa al igual que con un getch(), pero al usar este #define escribiremos en lugar de eso simplemente pause.
  • #define ct cout y #define cn cin, totalmente inaceptables. Algunas personas usan este tipo de #define’s para escribir menos, pero de verdad que (en la gran mayoría de los casos) no vale la pena el ahorro de caracteres, sólo estamos haciendo nuestro código menos entendible para otras personas.
  • #define false true, este es mas bien como una broma (y es increíble que funcione en verdad), pero si se usa en serio es como una rayada de madre. Si ejecutan el código verán que sí se muestra la línea donde se imprime PI aún que está dentro de un if al que nunca se debería de entrar ¿y porqué sí entra? porque false es true.
Así que ya saben cómo sí y cómo no usar un #define en C++, y ya no están ‘indefensos’ ante programadores con malos hábitos.
 

Nuevo: Curso de C++

Según Google Analytics están regresando las visitas, que raro que coincida con el inicio de clases ¿verdad? :D pero bueno, afortunadamente yo sí me preocupe por este blog en vacaciones.

Como ya repetí dos veces, esto es un blog, lo que significa que los posts mas recientes son los que aparecen al principio. Además, cuando inicié este blog mi propósito era ir avanzando en dificultad conforme al tiempo, no lo he cumplido mucho pero aún así los posts sobre los temas más básicos están ‘enterrados’ debajo de los más recientes. Así que me tomé un tiempo para echarme un clavado de panza en el Codex de WordPress y crear una forma diferente de navegar en el blog.

codigo c

Entonces así es como inauguro (siendo las 19:30 del dia… ah no verdad?) el Curso de C++. Todo lo que tienen que hacer es ir a este índice y comenzar a leer: Curso de C++, Índice. Luego pueden simplemente dar clic en el link ‘Siguiente’ que aparecerá en la barra lateral (->).

Así que espero que les sea de utilidad, si les gusta presúmanlo, si tienen un amigo que siempre les anda preguntando pues mándenlo aquí y líbrense de él.

 

Code::Blocks, un IDE moderno para C++

Yo hace un buen rato que no uso Dev-C++ para programar, y sin embargo vi que aquí en la barra lateral aún está el link hacia el post donde se los recomiendo. Así que ahora les voy a recomendar el IDE que uso actualmente Code::Blocks.

codeblocks

Code::Blocks tiene bastante ventajas respecto a otros IDES:

  • Aspecto moderno. ¿A quién le gusta programar a pantalla completa en consola con fuente amarilla sobre fondo azul hoy en día?
  • Multiplataforma. Windows XP/Vista/7, Mac OS X, Linux.
  • Rápido. Está escrito en C++.
  • Open Source. Eso significa muchas cosas, pero lo importante es que es gratis.
  • Pestañas. Puedes tener muchos archivos abiertos.
Lo pueden descargar aquí: Download Code::Blocks. Asegúrense de descargar la versión que trae el compilador incluido, el que dice mingw.
Si de plano nunca han manejado este tipo de software, tal vez les sean útiles estos consejos:
  • Para hacer un programa pequeño (lo que sea que no necesite mas de dos archivos) no se compliquen creando proyectos. Simplemente vayan a: File/New/Empy File. Luego guarden el archivo con extensión .cpp, preferentemente antes de empezar a programar (si no lo guardan no tendrán diferentes colores en su código (Sintax Highlighting)).
  • Hay tres botones relacionados con ‘correr’ el programa: Build, Run y Build and Run. El primero solo construye el programa pero no lo corre, el segundo solo lo corre y el tercero los construye y los corre. Así que cuando queramos probar nuestro programa el botón indicado es Build and Run, pero si no hemos hecho ningún cambio y queremos volver a probarlo es más rápido Run.