Capítulo 1: Programa básico en C++. Una "pequeña" explicación.



C++, algo más que un paso adelante

Existe una asignación muy habitual en informática:

x=x+1;

que en C y otros lenguajes puede expresarse como:

x++;

[Sabiendo que C++ es un lenguaje basado en C, es fácil entender la intención de los autores: avanzar un paso más, pero en mi modesta opinión es algo más que un paso,... un abismo.]


Definición de nuevos tipos de datos

Todos los lenguajes de programación, vienen con unos tipos predefinidos (más o menos igual en todos ellos). El usuario puede crear nuevos datos que son una combinación de los datos predefinidos. Por ejemplo, podemos definir un tipo de variable punto, que almacena dos enteros 'x' e 'y', para realizar operaciones con puntos debemos crear funciones. Veamos el siguiente ejemplo:
/* Created by Anjuta version 1.2.4a */
/*    This file will not be overwritten */

#include <iostream>
// la palabra struct crea un nuevo tipo de dato, en este caso denominado punto.
// que tiene dos variables enteras
struct punto{
    int x;
    int y;
};
// prototipo de las funciones utilizadas, observa los valores de retorno
punto asigna(int,int); // devuelve un punto
punto suma (punto,punto);// devuelve un punto
void imprimir(punto);// no devuelve ningun valor, solo realiza instrucciones.
int main()
{    punto A;// declaración de una variable punto definida por nosotros
    punto B;
    A=asigna(3,7);// llamada a la función asigna, que devuelve un punto
    B=asigna(10,3);
    imprimir(A);// llamada a la función imprimir
    imprimir(B);
    B=suma(A,B);// llamada a la función suma, que devuelve un punto
    imprimir(B);   
    return 0;
}
punto asigna(int j, int i){
    punto Z;
    Z.x=j; // para acceder a un elemento de la estructura se utiliza el operador '.'
    Z.y=i;
    return Z;
}
void imprimir (punto Z){

    std::cout<< "X= "<< Z.x <<" Y = "<< Z.y<<std::endl;
}
punto suma (punto Z, punto M){
   punto R;
   R.x=Z.x+M.x;
   R.y=Z.y+M.y;
   return R;
}


Otro tipo de datos ... las clases.

C++, tiene la posibilidad de definir nuevos tipos de datos: las clases.  Las clases no sólo permiten definir una combinación de datos predefinidos, también permite añadir las funciones u operaciones permitidas con esos datos. Esta es un arma poderosa, que facilita y mucho la creación de grandes proyectos (especialmente entre varios autores), aunque quizás sea difícil de explicarlo en un primer nivel.

Estas clases pueden heredarse, ¿quéeee?, pues que puedo crear nuevos tipos de datos partiendo de un tipo anterior (sin reescribir todo el código), implementando únicamente aquellos aspectos que me interesan.

Además, permite la sobrecarga de las funciones, esto es, puedo definir dos o más funciones suma, mientras tengan argumentos diferentes, el compilador sabrá escoger aquella que deseamos.

suma(punto, int);
suma (int, punto);
suma (punto,punto);
 
 
son tres funciones diferentes con el mismo nombre. No precisamos definir tres funciones con diferente nombre: sumapuntoint (punto,int); sumaintpunto(int,punto); sumapuntopunto(punto,punto);.


Existen unas funciones especiales: los operadores, que también pueden sobrecargarse , lo que permite a un usuario crear datos con operaciones similares a las predefinidas por el compilador, de tal suerte que nuestra función main quedará así:

int main()
{    punto A(3,7);// declaración de una variable punto definida por nosotros
    punto B(10,3);
    std::cout <<A;
    std::cout<<B;
    B=A+B;// o incluso B=+A;
    std::cout<<B;   
    return 0;
}


 El código completo:


/* Created by Anjuta version 1.2.4a */
/*    This file will not be overwritten */

#include <iostream>

class punto{
     int x;
     int y;
    public:
     punto(int,int);
     punto operator + (punto);
     friend std::ostream& operator << (std::ostream&,punto);
};

// funcion main ligeramente modificada

int main() 
{    punto A(7,7);
    punto B(10,3);
    std::cout<<"A es igual: "<<A<<std::endl;
    std::cout<<"B es igual: "<<B<<std::endl;
    B= A + B;
    std::cout<<"Tras la suma:"<<std::endl<<std::endl;
    std::cout<<"A es igual: "<<A<<std::endl;
    std::cout<<"B es igual: "<<B<<std::endl;
    return 0;
}
punto::punto(int j, int i){
    x=j;
    y=i;
}
punto punto::operator+ (punto P){
    return punto(x+P.x,y+P.y);
}
std::ostream& operator << (std::ostream& os, punto P){

    os<< "X= "<< P.x <<";  Y = "<< P.y<<";"<<std::endl;
return os;
}

En este apartado, mi intención no ha sido explicar nada, sino mostrar el potencial de C++.
Nuestros programas son muy básicos, de consola, es hora ya de adentrarse en el fantástico mundo de la programación gráfica.
Capítulo II: Programación Gráfica
Inicio