Programacion C++
Programacion C++
Programacion C++
Renombrar un tipo simple. Typedef int entero; Entero dato=10; Sizeof Nos permite saber el tamao en byte. sizeof(int) sizeof(double) int arg[5]; sizeof(arg)/sizeof(int);
Const Si se utiliza el especificador const en la declaracin de un mtodo de clase, la funcin no puede modificar ninguna propiedad en la clase. Este uso del especificador no puede utilizarse con funciones normales, solo con funcionesmiembro de clase.
Referencia
Las referencias se deben inicializar al declararse ya que no son en s una variable sino una etiqueta de otra y se declaran poniendo el operador & despus del tipo de dato. int n = 4; int &ref_n = n; std::cout << ref_n << std::endl; A efectos prcticos n y ref_n se refieren a la misma variable de hecho si con el operador & obtenemos la direccin de memoria de n y ref_n obtendramos la misma en ambos casos. En nuestra memoria ficticia se vera as:
Funciones Int atoi(arreglo char); Transforma a int el numero en el arreglo. Pag.222 Float atof(arreglo char); tranforma a float el numero en el arreglo.
Comprobacin alfabtica y de dgitos: Pag.213. todas trabajan con variables char. Pag.216. funciones numricas.
Funciones con Cadenas (Array char) pag.360 NULL=\0 Int Strcmp(array,arry); Void strcpy(array,array); Void strcat(array,array);
Int strlen(array); Array string.c_str(); FUNCIONES ALEATORIAS Srand(time(NULL)); 1+ Rand()%10; aleatorios del 1 al 10; -------------- Para tomar datos del reloj del sistemas y generar nmeros. ------------- genera los nmeros
Friend Funciones amigas: son funciones que tienen la ventaja de poder acceder a los miembros privados de una clase no se les pasa el puntero this implcitamente por consiguiente, se debe pasar explcitamente el objeto de la clase a tratar. No se pueden declarar 2 funciones amigas iguales en distintas clases, asi como no se puede declaran 2 funciones.
class Numero{ private: int numero; public: Numero(int num){numero=num;} friend void funcion(Numero& num); }; void funcion(Numero& num){ num.numero=10; } Numero num(20); funcion(num); Clases amigas: Para que una clase pueda acceder a todos los miembros privados de ora clase. class Clase2; class Clase1{ private: int num1; friend class Clase2; }; class Clase2{ public: void funcion(Clase1 clas){clas.num1=10;} };
Enum enum Enumeracion{ ROJO=0, NEGRO=1, }; int main(){ Enumeracion e=ROJO; return 0;} Struct typedef struct Estructura{ int dato; int arg[10]; } Estru; Apuntadores
Int *punt; entero. Char *punt carcter. Int i=10; Int *punt; punt=&i; cout<<punt; cout<<*punt ------------------ Declaracin de un puntero de tipo ------------------Declaracin de un puntero de tipo --------- Se declara una variable de tipo entero con valor de 10; ---------Se declara un puntero de tipo entero. ----El puntero obtiene la direccin de memoria de i gracias al &. ------- muestra la direccin de memoria de i. -------Muestra el valor de i.
Caso espacial
Int arg[10]; Int *punt; punt=arg; cin>>punt[5]; cout<<punt[6]; ------ puede leer el dato de la localidad 5; --- puede mostrar el dato de la localidad 6; NO SE UTILIZA *
If(punt=='(LL)
Arreglos bidimensionales
Int **punt %%% para arre$los idimensionales en este caso de tipo entero" ,olumnas+ * * * *ilas+** ** **
%%%%%%%%%% para definir el numero de filas; %%%%% numero de valor en la fila -i.;
for(int i=0;i1filas;i88)3 %%%%lectura de todas als filas cout115'(9" D# D6:;7 D# L6 *IL6 511i81115+ 5; cin22columnas; punt-i.= (int*)malloc (columnas*sizeof(int)); %%% columnas de cada fila
for(int /=0;/1columnas;/88)3 cin22punt-i.-/.; %%%%lectura de datos de la fila; < < cout11endl11endl; s!stem(5pause5);< free(punt) calloc(); %%%%%%li era espacio reservado " %%%%%% cumple la misma funcin )ue malloc;
realloc(punt4 tama=o total); main()3int* punt; punt=(int*)malloc(>*sizeof(int)); punt-0.=1; punt-1.=?; punt-?.=@; punt-@.=>; punt=(int*) realloc(punt4 A*sizeof(int)); punt->.=B; punt-B.=A; for(int i=0; i1A;i88)3 cout11punt-i.11endl; <
%%%presenta una variante respecto a malloc ! calloc4 permite ampliar un lo)ue de memoria"
cout11endl11endl; s!stem(5pause5);< 9a!or informacin+ &ttp+CCDDD"!outu e"comCDatc&Ev=@t#F,clG!/H Iunt=(int*)realloc(punt40) %%% 7e li era memoria
C++ Librerias de c++ pag.575 Archivos .h y .cpp El nombre de la clase, por ejemplo semforo, esta definida en un archivo de cabecera, que al igual que otros archivos tienen dos partes: un nombre de archivo y el sufijo (extensin) del archivo. De manera usual el nombre del archivo de la clase es el mismo que el nombre de la clase. La extensin, normalmente es .h, pero algunos compiladores y programas pueden usar .H, .hpp o .hxx. En el ajemplo anterior, el archivo se denomina Semaforo.h. Excepto en algunos casos especiales, en la declaracin de la clase solo se colocan las cabeceras de los mtodos. Sus definiciones se colocan, normalmente, en un archivo independiente llamado archivo de implementacin cuyo nombre es el del archivo de cabecera correspondiente, pero su extensin es .cpp en lugar de .h. por ejemplo Semaforo.cpp. Los dos archivos constituyen una biblioteca de clases y los programas que utilizan la clase definida en la biblioteca se denominaran programas clientes. Estos programas deben incluir la cabecera de la biblioteca con la directiva del compilador: #inluclude<iostream> #inclide Semafor.h; El primer coso indica al compilador de c++ que isotream es una biblioteca estndar; y el segundo formato con el nombre del archivo entre comillas, es una biblioteca definida por el programador.
NEW
'eD
Int* punt
punt= neD int -@.; devuelve la localidad donde se reserva @ espacios para entero" Dimensional Int **punt; Iunt= neD int* -?.; Iunt-i.=neD int->.; Int * punt-1. Int * punt-?. Li erar espacio en memoria creado por neD Delete punt; Delete -.punt; %% cuando se utiliza neD sin corc&etes %%cuando se utiliza neD con conrc&etes"
Clases Class Clase{ Public: Void Salir(); }; Void Clase::Salir(){} Constructor Un constructor de una clase C no puede esperar un argumento de tipo C. Class C{ }; C::C(C c){ } //Error
C::C(C& c){ } //Correcto Static Class Clase{ Static int dato; }; Int Clase::dato=10;
Class Clase{ Static void funcin(); } Void Clase::funcin(){ } Clase::funcin(); Inline Una funcin en lnea se ejecuta normalmente ms rpido, ya que el compilador inserta una copia fresca de la funcin en un programa en cada punto en que se llama a la funcin. La definicin de una funcin miembro en lnea no garantiza que el compilador lo haga realmente en lnea; es una decisin que el compilador toma, basado en los tipos de las sentencias dentro de la funcin y cada compilador de c++ toma esta decisin de modo diferente. Inline void Clase::funcin(){}
Lista inicializadora de miembros Para poder definir variables const y referencias en una clase.
Class Clase{ Private: Const int MAX; Int& dato; Public: Clase(int max,int da):MAX(max),dato(da){} }
Archivo para lectura
#include<fstream> ofstream entrada ---incluir librera para funciones
%%%% declara un flu/o para la modificacin del arc&ivo ! se le asi$na a entrada(entrada de datos) %%%%%%%% crea el arc&ivo
%%%%%%%%%%en el caso )ue no se encuentre lo va a crear ! si se encuentra orrara los datos )ue se encuentran ------------------------ Si existe el archivo solo aade nuevos datos.
if( entrada"fail() ) 3
cout115arc&ivo no avierto 5; return 1; cin22nom; $etline(nom); < %%%%%%% retorna 1 &u o un error"
%%%%%% in$resan cadena de caracteres %%%%%%%%%%%%%%% leer con espacios si es arre$lo c&ar %%%% si nom es strin$ lectura con espacios" %%% le enviamos los datos al arc&ivo
$etline(cin4nom);
entrada11nom11endl; #ntrada"close();
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM Ifstream salida; %%%%%% crea flu/o de salida del arc&ivo %%%%% a rir el arc&ivo ! recuperar los datos )ue se encuentren en el"
salida"open(Je/emplo"tKtL);
protected
private
Si se utiliza herencia private o protegida, existe un mtodo de hacer a los miembros de la clase base accesibles en la clase derivada:
Class Clase : protected Base{ Public: Base::varaible;
Dominacion (prioridad) En herencia simple, las funciones en la clase derivada con el mismo nombre que funciones de la clase base, anulan (reemplazan ) a todas las versiones de la clase base.
class Base{ public: void funcion(int dato){ cout<<"Entero"<<endl; } void funcion(float dato){ cout<<"Float"<<endl; } void funcion(){ cout<<"Vacio"<<endl; } }; class clase : Base{ public: void funcion(double dato){ cout<<"Double"<<endl; } };
En la clase derivada solo se contara con funcin(doubl) las dems de la clase base fueron remplazadas. Herencia multiple Class D : public C, public B{ } Ambigedad
class A{ public: void funcion(){ cout<<"A"<<endl; } }; class B{ public: void funcion(){
Para llama a funcin desde un objeto C se tendr que especificar de que clase tiene que ser: c.A::funcin(); Funciones virtuales De manera predeterminada, las funciones c++ tienen ligadura estatica; si la palabra reservada virtual procese a la declaracin de una funcin, esta funcin se llama virtual, y le indica al compilador que puede ser definida en una clase derivada y que en este caso la funcin se invocara directamente a travs de un puntero. Class clase{ Public: Virtaul void funcin(); }; Polimorfismo Permite que diferentes objetos respondan de modo distinto al mismo mensaje; adquiere su mxima potencia cuando se utiliza en unin de herencia.
Funcin: Template<class T> T funcin(T a, T b){ Return (a>b)?a:b; } Template<class T1, class T2> T2 funcion(T1 a, T2 b){ } Clases: Template<class T,int n>
Template<class T,int n=100>
Template<class T> Class Clase{ }; Class<int> clase; Template<class T,int n> Class Pila{ }; Pila<int,8> pila;
template<class T,int n> class Pila{ private: T arg[n]; public: Pila(); void funcion(); }; template<class T,int n> Pila<T,n>::Pila(){ }
Sobrecarga de operadores Excepto para el caso de los operadores new, delete, ->, las funciones pueden pueden devolver cualquier tipo de dato. Una funcin operador debe ser o bien una funcin miembro no estatica o una funcin no miembro que tenga al menos un parmetro cuyo tipo es una lcase, referencia a una clase enumeracin, o referencia a una enumeracin. Esta regla evita cambiar el significado de operadores que operan sobre tipos de datos intrnsecos. Error: Int operator+(int a,int b){ Return a*b;}
int operator+(Numero& num,int x){ return (num.getNumero()+x); } Para acceder directamente a los miembros de la clase se hace friend operator+: class Numero{ private: int numero; public: Numero(int num){numero=num;} Friend int operator+(Numero num1,Numero num2); }; Int operator+(Numero num1,Numero num2){ Return (num1.numero+num2.numero); }
Operador binario En los operadores binarios no se pude retornar una referencia porque no sabe a cual de los dos operandos referirse. Operador como mtodo:
class Vector{ private: int x,y; public: Vector operator+(const Vector); Vector operator-(const Vector); }; Vector Vector::operator+(const Vector vec){ return Vector(x+vec.x,y+vec.y); }
No puede retornar un valor Vector& porque se cuentan con 2 operando y a cul de los dos se les asignara la referencia: Int& dato=valo1+valor2 // ERROR.
Vector Vector::operator-(const Vector vec){
return Vector(x-vec.x,y-vec.y); }
*this:
Prefija
Vector& operator++(){ X++; y++; Return *this;}
Puede retornar un referencia Vector& porque se sabe a que objeto asignarle la referencia. Int valor=10; Int &dato= ++valor; Int dato=++valor; Postfija
Vector operator++(int){ X++; y++; Return Vector(x-1,y-1);}
Int valor=10; Int& dato=valor++; // Error; Nota: Si siempre se retorna un objeto se podr hacer una asignacin, Vector vector2=++vector1; Amiga Friend Vector& operator++(Vector& vec){ vec.x++; vec.y++; return vec; } ++vector; // operator++(vector) Operador + y
Vector Vector::operator-(){ return Vector(-x,-y); }
No puede retornar una referencia: Vector& Int valor=10; Int& dato= -valor //ERROR Operador de asignacin = Vector& operator=(const Vector& vec){ X=vec.x; Y=vec.y; Return *this; } Operador [ ]
class Arreglo{ private: int arg[10]; public: Arreglo(){ for(int i=0;i<10;i++){arg[i]=i+1;} } int operator[](int i){return arg[i];} };
Operador () Uno de los operadores mas usuales, el operador de llamda a una funcin(), puede ser sobrecargado solo mediante funciones miembro. La llamada a funcin se considera como un operador binario. x.operator() (i) Sobrecarga del flujo de salida class Numero{ private: int numero; public: Numero(int num){numero=num;} friend ostream& operator<<(ostream& os,const Numero& num); }; ostream& operator<<(ostream& os, const Numero& num){ os<<"Numero: "<<num.numero<<endl; } Sobrecarga del flujo de entrada class Numero{
istream& operator>>(istream& is,Numero& num){ is>>num.numero; return is; } Sobrecarga de new El operador new puede ser sobrecargado en c++. El compilador c++ considera automticamente el operador new como static, ya que el operador se llama con frecuencia para crear instancias de clase. El prototipo es: Void* operator new(size_t tamao); En donde el primer paramero debe ser size_t, un tipo declarado en el archivo de cabecera stdef.h, y el operador debe devolver un puntero void*. class Z{ public: static void* operator new(size_t tamao); }; Z* z=new Z;
El nombre de la clase Z que aparece despus de; operador new es el argumento para el tamao del parmetro. El compilador traduce el nombre de la clase en su tamao y pasa la informacin al parmetro tamao. Funciones de conversin No debe tener argumentos ni especificacin de retorno Operator nombretipo();
Para convertir la clase que especifica el operator a un doubl: class Numero{ public: int numero; public: Numero(int num){numero=num;} operator float(); }; Numero::operator float(){ return (float)numero; } Conversin entre clases class Rec{ private: int x,y; public: Rec(int xx,int yy){x=xx; y=yy;} }; class Polar{ private:
double radio; double angulo; public: operator Rec(); //para poder convertir a Rec }; Polar::operator Rec(){ double x=radio*cos(angulo); double y=radio*sin(angulo); return Rec(x,y); }
Rec=pol; Constructor de conversin class Rec{ private: Rec(Polar& p){ x=p.rad()*cos(p.ang); y=p.rad()*sin(p.ang); } };
Excepciones Try: Un bloque para detectar excepciones. Catch: un manejador para capturar excepciones de los bloques try. Throw: una expresin para levantar (raise) excepciones.
Se pueden levantar excepciones de cualquier tipo Throw int Throw clase; Etc. El manejador puede capturar excepciones de cualquier tipo. Catch(int n){ } Catch(Clase n){ } Especificacin de excepciones Void funcin()throw(){ } // No lanza excepciones. Void funcin()thorw(int,double){ } //Lanza excepciones de tipo int y doubl.
Fecha time_t El tipo de dato time_t es un tipo de dato de la biblioteca ISOC definido para el almacenamiento de valores de tiempo del sistema. Estos valores se devuelven desde la funcin time() de la biblioteca estndar. Este tipo es un typedef definido en la cabecera <time.h>. typedef long time_t; Ejemplo: time_t fecha_sistema; time(&fecha_sistema); La hora contenida en fecha_sistema no es entendible para el ser humano. Para poderla entender es necesario pasarla una struct que contenga componentes de la hora y la fecha, en formato separado, eso se logra con la funcin localtime().
struct tm ; int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; /* los segundos despus del minuto -- [0,61] */ /* los minutos despus de la hora -- [0,59] */ /* las horas desde la medianoche -- [0,23] */ /* el da del mes -- [1,31] */ /* los meses desde Enero -- [0,11] */ /* los aos desde 1900 */ /* los das desde el Domingo -- [0,6] */ /* los das desde Enero -- [0,365] */ /* el flag del Horario de Ahorro de Energa */