08/01/07

c++(5)

Para sobrecargar una función basta con definirla dos veces con dos firmas diferentes.
Vayamos por pasos:
1.- Creamos un directorio nuevo con "mkdir Maestro"
2.- Nos movemos a él con "cd Maestro"
3.- Creamos un archivo con nuestro inefable vim tecleando: "vim Programa.cpp" y escribimos el siguiente código:


#include <iostream>
#include <string>
#include "Maestro.hpp"
using namespace std;
void llegar();
int main(){
cout << endl <<"cuando el alumno está preparado "
<< endl << "el maestro llega"<< endl;
ensenar();
int i2;
i2 = ensenar(5);
string s3;
string s2="aaa";
s3=ensenar(s2);
return 0;
}
void llegar(){
cout << endl << "llegó el maestro" << endl;
}

4.- Guardamos y salimos ESC ":wq"
5.- Creamos otro archivo "vim Maestro.hpp" con el siguiente código fuente:
 
#include <iostream>
#include <string>
using namespace std;

void ensenar();
int ensenar(int materia);
string ensenar(string materia);




6.- Guardamos y salimos
7.- Creamos Maestro.cpp:


 
#include <iostream>
#include <string>
using namespace std;
void ensenar(){
cout << endl
<< "pero... el maestro no es más que el rio "
<< endl
<< "y es el discípulo el que ha de ir a beber "
<< endl;
}
int ensenar(int materia){
cout << endl
<< "1º sobrecarga: acepta int y retorna int "
<< endl
<< "cuando el monje abandona el monasterio " << endl
<< "los ratones entran en él "
<< endl;
return 1;
}
string ensenar(string materia){
cout << endl
<< "2º sobrecarga: acepta string y retorna string "
<< endl
<< "mas los ratones NUNCA entran "
<< endl
<< "porque el monje NO abandona el monasterio "
<< endl
<< "JAMAS "
<< endl << endl;
return "dos";
}

8.- Guardamos y salimos
9.- Creamos Makefile

Programa.bin: Programa.o Maestro.o
g++ -o Programa.bin Programa.o Maestro.o

Programa.o: Programa.cpp
g++ -c Programa.cpp

Maestro.o: Maestro.cpp Maestro.hpp
g++ -c Maestro.cpp

clean: Programa.bin
rm -f Programa.o

10.- Guardar y salir
11.- Compilar tecleando: "make"
Aparecerán en el directorio unos archivos "Maestro.o" y "Programa.o" si no se quiere que aparezcan teclee "make clean"
12.- Ejecutar tecleando: "./Programa.bin"

c++(4)

Previo
1.- Si queremos que la definición de la función esté después del punto de entrada (función 'main') debemos hacerlo así:
a) antes del punto de entrada ponemos un prototipo
b) después del punto de entrada ponemos la definición
2.- Ejemplo:




#include <iostream>
using namespace std;
void llegar(); //esto es un prototipo;
int main(){
cout << endl << "cuando el fruto está maduro "
<< "el arbol "
<< "deja de enviarle su savia" << endl;
llegar();
return 0;
}
void llegar(){ // y esta la definición de la función;
cout << endl << "es hora de partir" << endl;
}



3.- Si nos equivocamos y pretendemos poner la definición detrás sin poner un prototipo antes de llamarlo en el punto de entrada nos dará un error que será algo así como " was not declared in this scope" p. ej. " 'llegar' was not declared in this scope.

c++(3)

Previo
1.-En una consola o terminal tecleamos "vim Programa.cpp"
2.-Para entrar en modo inserción tecleamos "i" o "a" (la diferencia es que en el primer caso escribe a la izquierda del cursor, es decir antes, y en el segundo a la derecha.
aaabccc
Estando el cursor sobre la b si pasamos al modo inserción con "i" y tecleamos "ddd" quedaría:
aaadddbccc
En cambio si pasamos al modo inserción con "a" quedaría:
aaabdddccc
3. Tecleamos el siguiente código fuente:




#include <iostream>

using namespace std;
void llegar(){
cout << endl << "llegó el maestro" << endl;
}
int main(){
cout << endl << "Cuando el alumno está preparado "
<< "el maestro llega" << endl;
llegar();
return 0;
}



4.- Guadamos y salimos pasando al modo comando con ESC y tecleando ":wq" (para salir sin guardar, desde el modo comando ":q!")
5.- Creamos un Makefile. "vi Makefile"
6.- con este código:



Programa.bin:Programa.o
[TAB] g++ -o Programa.bin Programa.o

Programa.o:Programa.cpp
[TAB] g++ -c Programa.cpp

clean: Programa.bin
[TAB] rm -f Programa.o



7.- Guardamos y salimos "ESC" ":wq"
8.- Compilamos "make". Si nos da el error "falta un separador" es que hemos puesto espacios en vez de dar una vez a la tecla TAB (tabulación)
9.- Ejecutamos "./Programa.bin"