Académique Documents
Professionnel Documents
Culture Documents
Historia de la programacin
Inicios
Lenguaje de mquina : Unos y Ceros
1940
Lenguaje Ensamblador : Mnemonicos
1950
Lenguajes de Alto nivel : Basic, Cobol, Fortran, etc
Sentencias GOTO Cantidad de lneas 20.000
1970
Programacin Estructurada : Pascal, C, etc
Bifurcacin y control (while/for/switch/etc..) Cantidad mxima de lneas 50.000
1970
Programacin Orientada a Objetos : SmallTalk, C++, ObjectiveC, Java, Delphi, etc
Agrupa datos y cdigo : Encapsulamiento y Abstraccin. Mayor complejidad
Historia de la programacin
Comentarios
int main() { // this is end-of-line comment // one comment per line /* this is standard-C comment, over more than one line */ return (0); }
Sobrecarga de funciones
#include <stdio.h> void show(int val) { printf("Integer: %d\n", val); } void show(double val) { printf("Double: %lf\n", val); } void show(char *val) { printf("String: %s\n", val); } int main() { show(12); show(3.1415); show("Hello World\n!"); return (0); }
Introduccin a objetos
Introduccin Objetos
definir clase Perro: propiedad sexo en {macho, hembra} propiedad color en {blanco, marrn, negro, mixto} propiedad cansancio en (nada, poco, moderado, mucho, exhausto) ... otras propiedades ... mtodo paseo() devuelve cansancio mtodo quieto() devuelve nada mtodo muertito() devuelve nada mtodo comer(Comida) devuelve nada ... otros comportamientos ...
crear Fido: mtodo buscar() devuelve rama Fido.sexo = macho Fido.color = marrn crear Princesa: Princesa.sexo = hembra Princesa.color = blanco Princesa.nombre = alma
Encapsulamiento
Abstraccin
Clasificacin
Distintas Clasificaciones
Definiciones
Clase: Conjunto de objetos que comparten una estructura comn y un comportamiento comn. Interfaz: Proporciona una visin externa y por tanto enfatiza la abstraccin a la vez que oculta su estructura y los secretos de su comportamiento. Mtodo: Son funciones miembro del objeto, estn embebidas en el mismo. Instanciar: Se dice que una clase est instanciada cuando se ha creado un objeto de la misma. Herencia: Las clases pueden heredar ciertos comportamientos y caractersticas de otras. Clase base vs. Clase derivada: Cuando se hereda de una clase a otra clase, la clase padre de denomina Clase base y la que ha heredado se la denominar clase derivada. Polimorfismo: Se denomina polimorfismo a la capacidad de un mtodo de adquirir distintos comportamientos en funcin de los datos con los que se lo invoca. Sobrecarga (de operadores): Es la posibilidad de redefinir el comportamiento de los operadores con el nuevo objeto, es como asignar una funcin o mtodo a un operador.
Analogas
variables -> propiedades funciones -> mtodos Definir una variable -> Instanciar
(Se instancia una clase creando un objeto)
Implementacin de una funcin -> Implantar :: -> Miembro de : . -> Clase derivada de -> Invocacin de una funcin miembro
Clase2
Ejemplo:
#include <iostream.h> /* Definicion de la clase */ class box { private: int length; int width; public: box(void); //Constructor ~box(void); //Destructor void set(int new_length, int new_width); int get_area(void) {return (length * width);} protected: my_pointer(); };
struct
El lenguaje C++ extendi la palabra clave struct de C otorgndole el mismo significado que a class pero con la diferencia de que todos sus miembros son pblicos (public) por defecto a diferencia de class que los declara como privados.
modificadores de acceso
// CLASE EXTERNA // Solo puedo acceder mtodos // o propiedades declaradas // como public
// CLASE DERIVADA // Puedo acceder mtodos // o propiedades declaradas // como public o protected
Contructores y Destructores
Instanciamiento: Cuando se instancia una clase, se llama a su constructor, y al terminar de usarla a su destructor. Para definir un constructor se define un mtodo con el mismo nombre de la clase, y para su destructor tambin el nombre pero precedido por el smbolo ~ Los constructores y destructores debe declararlos siempre como Pblicos. #include <iostream.h> /* Definicion de la clase */ class box { private: int length; int width; public: box(void); //Constructor ~box(void); //Destructor void set(int new_length, int new_width); int get_area(void) {return (length * width);} protected: my_pointer(); }; //Constructor box::box(void) { length = 8; width = 8; } //Destructor box::~box(void) { length = 0; width = 0; }
this
La palabra clave this representa dentro de una clase la direccin de memoria del objeto que se est ejecutando. Es un puntero, cuyo valor es la direccin del objeto.
Ejemplo:
#include <iostream.h> class CDummy { public: int soy_yo (CDummy& param); }; int CDummy::soy_yo (CDummy& param) { if (¶m == this) return 1; else return 0; } int main () { CDummy a; CDummy* b = &a; if ( b->soy_yo(a) ) cout << si, &a es b"; return 0; }
OUTPUT: 7 6
Polimorfismo
Definicin Polimorfismo: "el mecanismo que permite definir e Invocar funciones idnticas en denominacin e interfaz, pero con implementacin diferente". Dos funciones pueden tener el mismo nombre, pero:
El tipo de sus argumentos difieren La cantidad de sus argumentos difieren
Dos tipos:
Sobrecarga de funciones Sobrecarga de operadores
Sobrecarga de Funciones
#include "iostream.h"
// overload do_stuff; // This squares an integer // This squares an integer
int do_stuff(float);
// This averages two floats
float do_stuff(const float, float); main() { int index = 12; float length = 14.33; float height = 34.33;
cout << "12 squared is " << do_stuff(index) << "\n"; cout << "24 squared is " << do_stuff(2 * index) << "\n"; cout << "Three lengths is " << do_stuff(length) << "\n"; cout << "Three heights is " << do_stuff(height) << "\n"; cout << "The average is " << do_stuff(length,height) << "\n"; }
// Result of execution 12 squared is 144 24 squared is 576 Three lengths is 42 Three heights is 102 The average is 24.330002
Sobrecarga de Operadores
Expresin @a a@ a@b a@b a(b, c...) a->b Operador (@) + - * & ! ~ ++ -++ -+ - * / % ^ & | < > == != <= >= << >> && || , = += -= *= /= %= ^= &= |= <<= >>= [ ] () -> Funcin Miembro A::operator@() A::operator@() A::operator@(B) A::operator@(B) A::operator()(B, C...) A::operator->()
Clase Compleja
class complex { private: float x, y; float sqr(float,float); public: complex() { x=0; y=0; } complex(float i,float j) { x=i; y=j; } void set(float i,float j) { x=i; y=j; } void print(); float modulo(); void operator= (complex ob2); complex operator+ (complex ob2); complex operator- (complex ob2); complex operator* (complex ob2); complex operator/ (complex ob2); };
Clase Compleja
float complex::sqr(float n1,float n2) { return (n1*n1+n2*n2)); } void complex::print() { cout << "(" << x << "," << y << ")"; } float complex::modulo() { return sqrt((double)(x*x+y*y)); } complex complex::operator+ (complex ob2) { complex temp; temp.x = x + ob2.x; temp.y = y + ob2.y; return temp; } void complex::operator= (complex ob2) { complex temp; x = ob2.x; y = ob2.y; } complex complex::operator* (complex ob2) { complex temp; temp.x = (x*ob2.x)-(y*ob2.y); temp.y = (x*ob2.y)+(y*ob2.x); return temp; } complex complex::operator- (complex ob2) { complex temp; temp.x = x - ob2.x; temp.y = y - ob2.y; return temp; }
Clase Compleja
complex complex::operator/ (complex ob2) { complex temp; temp.x = ((x*ob2.x)+(y*ob2.y))/sqr(ob2.x,ob2.y); temp.y = ((y*ob2.x)-(x*ob2.y))/sqr(ob2.x,ob2.y); return temp; } void main() { char c; for(int j=0;j<25;j++) { cout << endl; } complex A(1,2),B(3,4); cout << "Modulo de A: " << A.modulo() << endl; cout << "Modulo de B: " << B.modulo() << endl; A=B; cout << "Modulo de A: " << A.modulo() << endl; cout << "Modulo de B: " << B.modulo() << endl; cout << "Presione una tecla..."; c=cin.get(); }
Sobrecarga de operadores
Class Int { operator + (Int); operator + (Float); } Class Float { operator + (Float); operator + (Int); } Int A; // Int int Float F; String S; A + F; A + F; // (1) // Sobrecargo el + del Int // Osea estoy usando (1) // Sobrecargo el + del Float // Osea estoy usando (2)
// (2)
Seguir desarrollando
Clases Derivadas
#include <iostream.h> class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b;} }; class CRectangle: public CPolygon { public: int area (void) { return (width * height); } }; class CTriangle: public CPolygon { public: int area (void) { return (width * height / 2); } }; int main () { CRectangle rect; CTriangle trgl; rect.set_values (4,5); trgl.set_values (4,5); cout << rect.area() << endl; cout << trgl.area() << endl; return 0; }
Herencia Mltiple
#include <iostream.h> class CPolygon { protected: int width, height; public: void set_values (int a, int b) { width=a; height=b;} }; class COutput { public: void output (int i); }; void COutput::output (int i) { cout << i << endl; } class CRectangle: public CPolygon, public COutput { public: int area (void) { return (width * height); } }; class CTriangle: public CPolygon, public COutput { public: int area (void) { return (width * height / 2); } }; int main () { CRectangle rect; CTriangle trgl; rect.set_values (4,5); trgl.set_values (4,5); rect.output (rect.area()); trgl.output (trgl.area()); return 0; }
#include <iostream.h> #include <stdlib.h> int main () { char input [100]; int i,n; long * l, total = 0; cout << Cuantos nmeros desea ingresar? "; cin >> i; l= new long[i]; if (l == NULL) exit (1); for (n=0; n<i; n++) { cout << Nmero: "; cin.getline (input,100); l[n]=atol (input); } cout << Usted ingreso: "; for (n=0; n<i; n++) cout << l[n] << ", "; delete[] l; return 0; }
Archivos en C++
http://www.cplusplus.com/ref/
Archivos en C++
ofstream: Clase para operaciones de escritura (derivada de ostream) ifstream: Clase para operaciones de lectura (derivada de istream) fstream: Clase para operaciones de lectura y escritura (derivada de iostream)
ios::in ios::out ios::app ios::trunc ios::binary Abre un archivo para lectura Abre un archivo para escritura Abre para escritura al final del archivo Si el archivo existe lo pisa Modo binario
void open (const char * nom_arch, openmode modo); arch.open (ejemplo.bin", ios::out | ios::app | ios::binary); Se puede chequear si el archivo fue abierto llamando a la funcin miembro: bool is_open(); void close (); istream& write ( char * buffer, streamsize size ); ostream& read ( char * buffer, streamsize size );
Archivos en C++
Ejemplo
// Escribiendo un archivo de texto #include <fstream.h> int main () { ofstream arch_ej (ejemplo.txt"); if (arch_ej.is_open()) { arch_ej << Esto es una lnea.\n"; arch_ej << Otra lnea.\n"; arch_ej.close(); } return 0; } // Leyendo un archivo #include <iostream.h> #include <fstream.h> #include <stdlib.h> int main () { char buffer[256]; ifstream arch_ej (ejemplo.txt"); if (! arch_ej.is_open()) { cout << Error al abrir el archivo"; exit (1); } while (! arch_ej.eof() ) { arch_ej.getline (buffer,100); cout << buffer << endl; } return 0; }
Archivos en C++
Movindose dentro de un archivo
ios::beg ios::cur ios::end Es desplazamiento es desde el principio del archivo. Es desplazamiento es desde la posicin actual del archivo. Es desplazamiento es desde el fin del archivo.
tellg() and tellp() Estos dos miembros retornan un valor de tipo pos_type que es un tipo de dato entero que representa la posicin actual. En el caso de tellg() ser para la lectura y tellp() para la escritura. seekg() and seekp() Este par de funciones permiten cambiar la posicin actual del puntero de lectura y escritura sobre el archivo. Las mismas estn sobrecargadas y tienen dos prototipos.
seekg ( pos_type position ); seekp ( pos_type position );
Usando este prototipo se cambia la posicin tomando como referencia el principio del archivo.
seekg ( off_type offset, seekdir direction ); seekp ( off_type offset, seekdir direction );
Archivos en C++
Ejemplo
// Obtener el tamao de un archivo #include <iostream.h> #include <fstream.h> const char * nom_arch = ejemplo.txt"; int main () { long l,m; ifstream archivo (nom_arch, ios::in|ios::binary); l = archivo.tellg(); archivo.seekg (0, ios::end); m = archivo.tellg(); archivo.close(); cout << El tamao de " << nom_arch; cout << " es " << (m-l) << " bytes.\n"; return 0; } // Leyendo un archivo binario #include <iostream.h> #include <fstream.h> const char * nom_arch = ejemplo.txt"; int main () { char * buffer; long size; ifstream archivo (nom_arch, ios::in|ios::binary|ios::ate); size = archivo.tellg(); archivo.seekg (0, ios::beg); buffer = new char [size]; archivo.read (buffer, size); archivo.close(); cout << El archivo completo est en el buffer"; delete[] buffer; return 0; }