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 datosTodos 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; } |
|
/*
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; } |