aun vive esta sección?
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
#2
Python / [Script] Calcular el Área de un triangulo conociendo solo los vertices
Septiembre 09, 2015, 02:14:21 PM
No es un gran aporte pero si a alguien le sirve.. le puede hechar una ojeada
Saludos.
Saludos.
#3
Python / Re:Introducción a Python
Febrero 17, 2015, 04:14:23 AM
Y el siguiente numero de este taller??
#4
Front-end / Re:El gran libro de HTML5, CSS3 y Javascript [MF]
Enero 29, 2015, 02:52:34 AM
Dharok its back! Vamos a ver que tal!
#5
Batch - Bash / Re:*.doc's f*cker ~ By D4RK DN4
Agosto 09, 2010, 11:27:24 PMNo tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Te perdono. Porque no soy Dios. Pero, de repetirse una falta de respeto, sos historia.
una pregunta, obiamente respetuosa y de caballero a caballero, ke me dejo con duda...
Dios no perdonaria en tu caso? jajajaja bueno espero la respuesta
#6
Batch - Bash / Re:[batch] Generador de virus/bromas v. 2.0 by naru xD
Agosto 01, 2010, 08:49:59 PM
Muy bueno,esta muy buena tambien la intro!!! esta cool... y gracias por el aporte!!
#7
Hacking / Re:Introduccion al TCP/IP; Escaneo de puertos avanzado y DoS (By: WoOt)
Julio 18, 2010, 05:43:02 PM
Exelente men! EXLENTE! me explico mucho y ahora se mas!
#8
Redes y antenas / Re:Manual Uncapping
Junio 12, 2010, 11:26:10 PM
La pagina esta caida y quiero lograr el uncap, como seria a 2MB? y otra duda, alguien tiene los programas para subirlos o algo?
#9
Otros lenguajes / Re:¿Que lenguaje de programacion aprender primero?
Mayo 08, 2010, 11:45:18 AM
Cada uno opina lo que uno quiere...¬¬ y no digo que este mal aprender phyton o perl pero bueno...cada quien por su lado...
#10
Python / Re:PyJunior, programacion para los mas pequeños.
Abril 27, 2010, 04:40:01 PM
Que tierno ^^ jajaj xD, pero psss como asi a "atraer a la programacion a los juniors"? a los pekeños si apenas les enseñan a hacer grafias en exel...
#11
C / C++ / Poliformismo
Abril 21, 2010, 05:00:47 PM
Polimorfismo
Con las funciones virtuales y el polimorfismo es posible diseñar e implementar sistemas que con extensibles con mayor facilidad. Los programas se pueden escribir para que procesen objetos en forma genérica, como objetos de clase base de todas las clases existentes en una jerarquía. Las clases que no existen durante el desarrollo del programa se pueden agregar con poca o sin modificaciones a la parte genérica del programa, siempre y cuando esas clases sean parte de la jerarquía que está siendo procesada en forma genérica. Las únicas partes del programa que necesitarán modificaciones son aquellas que requieren un conocimiento directo de la clase particular que se está agregando a la jerarquía.
Funciones virtual
Si tenemos un conjunto de clases con las formas: Circle, Triangle, Rectangle, Square, que están derivadas de la clase base Shape. En la programación orientada a objetos a cada una de estas figuras se le podría dar la habilidad de dibujarse a sí misma. Aunque cada clase tiene su propia función draw, esta es bastante diferente en cada forma. Cuando se dibuja una forma sin importar el tipo, sería agradable tratar a todas esta formas genéricamente como objetos de la clase base Shape.
Luego, para dibujar cualquier forma podríamos llamar a la función draw de la clase base Shape y dejar que el programa determine dinámicamente (en tiempo de ejecución) cual función draw de la clase derivada se debe utilizar.
Para permitir este tipo de comportamiento declaramos a draw de la clase base como función virtual, y sobreponemos a draw en cada una de las clases derivadas para dibujar la forma adecuada.
Una función de este tipo se declara precediendo la palabra clave virtual, al prototipo de la función, en la definición de la clase, por ejemplo:
Clases base abstractas y clases concretas.
Hay casos en los que es útil definir clases, para las cuales el programador nunca pretende instanciar ningún objeto. Tales clases se denomina clases abstractas. Debido a que estas se utilizan como clases base en situaciones de herencia, normalmente nos referimos a ellas como clases base abstractas. No es posible instanciar un objeto de una clase base abstracta.
El único propósito de una clase abstracta es proporcionar una clase base adecuada a partir de la cual las clases puedan heredar interfaces y/o implementaciones. Las clases de las que se pueden instanciar objetos se denomina clases concretas.
Por ejemplo, se puede tener una clase base abstracta TwoDimwensionalShape y derivar clases concretas tales como Cube, Sphere, Cylinder. Las clases base abstractas son demasiado genéricas como para definir objetos reales, y necesitamos ser mucho más específicos antes de que podamos pensar en instanciar objetos.
Para que una clase sea abstracta se debe declarar como "pura" una o más de sus funciones virtual. Una función virtual pura es aquella que tiene un inicializador = 0 en su declaración, por ejemplo:
Polimorfismo
C++ permite el polimorfismo, que es la habilidad de los objetos de diferentes clases que están relacionados mediante la herencia para responder en forma diferente al mismo mensaje (es decir, a la llamada de función miembro). El mismo mensaje que se envía a muchos tipos de objetos diferentes toma "muchas formas", y de ahí viene el término polimorfismo.
Por ejemplo, si la clase Rectangle se deriva de la clase Quadrilateral, un objeto Rectangle es una versión más específica de un objeto Quadrilateral. Una operación (como el cálculo del perímetro o el área) que puede realizarse en un objeto Quadrilateral también puede realizarse en un objeto Rectangle.
El polimorfismo se implementa por medio de funciones virtual.
Cuando se hace una petición por medio de un apuntador de clase base (o referencia) , para utilizar una función virtual, C++ elige la función sobrepuesta correcta en la clase derivada adecuada que está asociada con ese objeto. Hay muchas veces en que una función miembro no virtual está definida en la clase base y sobrepuesta en una clase derivada. Si a una función de estas se le llama mediante un apuntador de clase base al objeto de la clase derivada, se utiliza la versión de la clase base. Si la función miembro se llama mediante un apuntador de la clase derivada, se utiliza la versión de dicha clase derivada. Este comportamiento no es polimórfico.
Mediante el uso de funciones virtual y el polimorfismo, una llamada de función miembro puede causar que sucedan diferentes acciones, dependiendo del tipo de objeto que recibe la llamada. Esto le da una capacidad expresiva tremenda al programador.
El polimorfismo promueve la extensibilidad: el software que está escrito para llamar al comportamiento polimórfico se escribe en forma independiente de los tipos de objetos a los cuales se envían los mensajes. Por lo tanto los nuevos tipos de objetos que pueden responder a los mensajes existentes se pueden agregar a un sistemas, sin modificar el sistema base.
Un ejemplo concreto
El enunciado del programa sería el siguiente:
Definir una clase Shape que sea una clase base abstracta que contenga la interfaz hacia la jerarquía. Derive a TwoDimensionalShape y ThreeDimensionalShape de la clase Shape, que también serán abstractas. Utilice una función print virtual para enviar a la salida el tipo y dimensiones de cada figura. También incluye funciones virtual area y volume para que estos cálculos puedan realizarse para los objetos de cada clase concreta de la jerarquía.
Escriba un programa controlador que pruebe la jerarquía de la clase Shape.
Y la solución...
Con las funciones virtuales y el polimorfismo es posible diseñar e implementar sistemas que con extensibles con mayor facilidad. Los programas se pueden escribir para que procesen objetos en forma genérica, como objetos de clase base de todas las clases existentes en una jerarquía. Las clases que no existen durante el desarrollo del programa se pueden agregar con poca o sin modificaciones a la parte genérica del programa, siempre y cuando esas clases sean parte de la jerarquía que está siendo procesada en forma genérica. Las únicas partes del programa que necesitarán modificaciones son aquellas que requieren un conocimiento directo de la clase particular que se está agregando a la jerarquía.
Funciones virtual
Si tenemos un conjunto de clases con las formas: Circle, Triangle, Rectangle, Square, que están derivadas de la clase base Shape. En la programación orientada a objetos a cada una de estas figuras se le podría dar la habilidad de dibujarse a sí misma. Aunque cada clase tiene su propia función draw, esta es bastante diferente en cada forma. Cuando se dibuja una forma sin importar el tipo, sería agradable tratar a todas esta formas genéricamente como objetos de la clase base Shape.
Luego, para dibujar cualquier forma podríamos llamar a la función draw de la clase base Shape y dejar que el programa determine dinámicamente (en tiempo de ejecución) cual función draw de la clase derivada se debe utilizar.
Para permitir este tipo de comportamiento declaramos a draw de la clase base como función virtual, y sobreponemos a draw en cada una de las clases derivadas para dibujar la forma adecuada.
Una función de este tipo se declara precediendo la palabra clave virtual, al prototipo de la función, en la definición de la clase, por ejemplo:
Clases base abstractas y clases concretas.
Hay casos en los que es útil definir clases, para las cuales el programador nunca pretende instanciar ningún objeto. Tales clases se denomina clases abstractas. Debido a que estas se utilizan como clases base en situaciones de herencia, normalmente nos referimos a ellas como clases base abstractas. No es posible instanciar un objeto de una clase base abstracta.
El único propósito de una clase abstracta es proporcionar una clase base adecuada a partir de la cual las clases puedan heredar interfaces y/o implementaciones. Las clases de las que se pueden instanciar objetos se denomina clases concretas.
Por ejemplo, se puede tener una clase base abstracta TwoDimwensionalShape y derivar clases concretas tales como Cube, Sphere, Cylinder. Las clases base abstractas son demasiado genéricas como para definir objetos reales, y necesitamos ser mucho más específicos antes de que podamos pensar en instanciar objetos.
Para que una clase sea abstracta se debe declarar como "pura" una o más de sus funciones virtual. Una función virtual pura es aquella que tiene un inicializador = 0 en su declaración, por ejemplo:
Polimorfismo
C++ permite el polimorfismo, que es la habilidad de los objetos de diferentes clases que están relacionados mediante la herencia para responder en forma diferente al mismo mensaje (es decir, a la llamada de función miembro). El mismo mensaje que se envía a muchos tipos de objetos diferentes toma "muchas formas", y de ahí viene el término polimorfismo.
Por ejemplo, si la clase Rectangle se deriva de la clase Quadrilateral, un objeto Rectangle es una versión más específica de un objeto Quadrilateral. Una operación (como el cálculo del perímetro o el área) que puede realizarse en un objeto Quadrilateral también puede realizarse en un objeto Rectangle.
El polimorfismo se implementa por medio de funciones virtual.
Cuando se hace una petición por medio de un apuntador de clase base (o referencia) , para utilizar una función virtual, C++ elige la función sobrepuesta correcta en la clase derivada adecuada que está asociada con ese objeto. Hay muchas veces en que una función miembro no virtual está definida en la clase base y sobrepuesta en una clase derivada. Si a una función de estas se le llama mediante un apuntador de clase base al objeto de la clase derivada, se utiliza la versión de la clase base. Si la función miembro se llama mediante un apuntador de la clase derivada, se utiliza la versión de dicha clase derivada. Este comportamiento no es polimórfico.
Mediante el uso de funciones virtual y el polimorfismo, una llamada de función miembro puede causar que sucedan diferentes acciones, dependiendo del tipo de objeto que recibe la llamada. Esto le da una capacidad expresiva tremenda al programador.
El polimorfismo promueve la extensibilidad: el software que está escrito para llamar al comportamiento polimórfico se escribe en forma independiente de los tipos de objetos a los cuales se envían los mensajes. Por lo tanto los nuevos tipos de objetos que pueden responder a los mensajes existentes se pueden agregar a un sistemas, sin modificar el sistema base.
Un ejemplo concreto
El enunciado del programa sería el siguiente:
Definir una clase Shape que sea una clase base abstracta que contenga la interfaz hacia la jerarquía. Derive a TwoDimensionalShape y ThreeDimensionalShape de la clase Shape, que también serán abstractas. Utilice una función print virtual para enviar a la salida el tipo y dimensiones de cada figura. También incluye funciones virtual area y volume para que estos cálculos puedan realizarse para los objetos de cada clase concreta de la jerarquía.
Escriba un programa controlador que pruebe la jerarquía de la clase Shape.
Y la solución...
#12
C / C++ / Plantillas en C++
Abril 21, 2010, 04:45:13 PM
Plantillas en C++
Las plantillas nos permiten especificar, con un solo segmento de código, un rango completo de funciones relacionadas (sobrecargadas), llamadas funciones de plantilla, o un rango completo de clases relacionadas, llamadas clases de plantilla.
Podríamos escribir una sola plantilla de función para una función de ordenamiento de arreglos y luego hacer que C++ generara automáticamente funciones de plantilla separadas que ordenaran un arreglo de int, un arreglo de float, un arreglo de string, etc.
Podríamos escribir una sola plantilla de clase de pila y luego hacer que C++ generara automáticamente clases de plantillas separadas, tales como una clase de pila de int, una clase de pila de float, una clase de pila de string, etc.
Hay que observar la diferencia entre las plantillas de función y las funciones de plantilla: las plantillas de función y las plantillas de clase son como plantillas con las cuales trazamos formas, y las funciones de plantilla y las clases de plantilla son como los trazos separados, que tienen la misma forma pero pueden trazarse en colores diferentes, por ejemplo.
Plantillas de función
Las funciones sobrecargadas se utilizan normalmente para realizar operaciones similares sobre diferentes tipos de datos. Si las operaciones son idénticas para cada tipo, esto puede realizarse en forma más compacta y conveniente mediante el uso de plantillas de función. Basándose en los tipos de argumento que se proporcionan en las llamadas a esa función, el compilador genera automáticamente funciones de código objeto separadas para manejar adecuadamente cada tipo de llamada. En C esta tarea se puede realizar mediante macros creadas con la directiva de preprocesador #define.
Sin embargo las macros presentan la posibilidad de serios efectos secundarios y no permiten que el compilador realice revisión de tipo. Las plantillas de función proporcionan una solución compacta similar a la de las macros, pero permiten una revisión de tipo completa. Todas las definiciones de plantillas de función comienzan con la palabra clave témplate, seguida de una lista de parámetros formales para dicha plantilla encerrados entre paréntesis angulares (< y >), cada parámetro formal que representa un tipo debe estar precedido por la palabra clave class, como en:
Los parámetros formales de una definición de plantilla se utilizan (como sucedería con los argumentos de tipos integrados o de tipos definidos por el usuario) para especificar los tipos de argumentos de la función, para especificar el tipo de devolución de la función y para declarar variables en el interior de la función.
Para definir una plantillas de clase, se puede usar el siguiente formato:
Primer programa
El siguiente programa hace uso de plantillas para determinar el mínimo y máximo valor de un arreglo de elementos dado.
La primera función recibe tiene como parámetros un puntero al tipo de elemento dado y el número de elementos y retorna el menor de los elementos que se encuentran en el arreglo.
La segunda función recibe los mismos parámetros y retorna el mayor de los elementos presentes en el arreglo.
Finalmente en la función main, se hace una prueba de estas funciones, con arreglos de enteros y flotantes.
Segundo programa
En este programa se hace uso de plantillas, para elaborar una función que permita ordenar los elementos de un arreglo.
Esta función recibe tiene como parámetros, un puntero al tipo de elemento dado, y dos enteros que indican los índices del primero y último elemento.
Aquí se hace uso del algoritmo OrdenarShell para llevar a cabo la tarea. En la función principal se prueba esta plantilla con arreglos de enteros y flotantes.
Tercer programa
En este programa se implementa, mediante el uso de plantillas la clase NuevaPila, que consiste en una Pila, en la que se pueden llevar a cabo las operaciones como insertar y eliminar datos de la misma, mostrar en pantalla los datos de la pila.
Esta es una pila estática, con un número predefinido de 10 elementos.
En al función principal, se usa una pila de enteros, flotantes y
caracteres para poder llevar a cabo una prueba de la plantilla creada.
Cuarto ejemplo
Mediante el uso de plantillas cree una clase Cola, en la que se puedan llevar a cabo operaciones como: encolar, decolar e imprimir los datos miembro. Realice una función controladora para probar el uso de esta clase.
La clase NodoCola, tiene como amiga a la clase Cola.
Se presenta además una función para las opciones del usuario, y que se encarga de realizar las llamadas a las funciones de las clases. Esta
función es llamada desde main.
En la función main se ha usado como ejemplo una cola de enteros, aunque también se pudo haber usado otro tipo de datos como: char, double, y otros.
Las plantillas nos permiten especificar, con un solo segmento de código, un rango completo de funciones relacionadas (sobrecargadas), llamadas funciones de plantilla, o un rango completo de clases relacionadas, llamadas clases de plantilla.
Podríamos escribir una sola plantilla de función para una función de ordenamiento de arreglos y luego hacer que C++ generara automáticamente funciones de plantilla separadas que ordenaran un arreglo de int, un arreglo de float, un arreglo de string, etc.
Podríamos escribir una sola plantilla de clase de pila y luego hacer que C++ generara automáticamente clases de plantillas separadas, tales como una clase de pila de int, una clase de pila de float, una clase de pila de string, etc.
Hay que observar la diferencia entre las plantillas de función y las funciones de plantilla: las plantillas de función y las plantillas de clase son como plantillas con las cuales trazamos formas, y las funciones de plantilla y las clases de plantilla son como los trazos separados, que tienen la misma forma pero pueden trazarse en colores diferentes, por ejemplo.
Plantillas de función
Las funciones sobrecargadas se utilizan normalmente para realizar operaciones similares sobre diferentes tipos de datos. Si las operaciones son idénticas para cada tipo, esto puede realizarse en forma más compacta y conveniente mediante el uso de plantillas de función. Basándose en los tipos de argumento que se proporcionan en las llamadas a esa función, el compilador genera automáticamente funciones de código objeto separadas para manejar adecuadamente cada tipo de llamada. En C esta tarea se puede realizar mediante macros creadas con la directiva de preprocesador #define.
Sin embargo las macros presentan la posibilidad de serios efectos secundarios y no permiten que el compilador realice revisión de tipo. Las plantillas de función proporcionan una solución compacta similar a la de las macros, pero permiten una revisión de tipo completa. Todas las definiciones de plantillas de función comienzan con la palabra clave témplate, seguida de una lista de parámetros formales para dicha plantilla encerrados entre paréntesis angulares (< y >), cada parámetro formal que representa un tipo debe estar precedido por la palabra clave class, como en:
Los parámetros formales de una definición de plantilla se utilizan (como sucedería con los argumentos de tipos integrados o de tipos definidos por el usuario) para especificar los tipos de argumentos de la función, para especificar el tipo de devolución de la función y para declarar variables en el interior de la función.
Para definir una plantillas de clase, se puede usar el siguiente formato:
Primer programa
El siguiente programa hace uso de plantillas para determinar el mínimo y máximo valor de un arreglo de elementos dado.
La primera función recibe tiene como parámetros un puntero al tipo de elemento dado y el número de elementos y retorna el menor de los elementos que se encuentran en el arreglo.
La segunda función recibe los mismos parámetros y retorna el mayor de los elementos presentes en el arreglo.
Finalmente en la función main, se hace una prueba de estas funciones, con arreglos de enteros y flotantes.
Segundo programa
En este programa se hace uso de plantillas, para elaborar una función que permita ordenar los elementos de un arreglo.
Esta función recibe tiene como parámetros, un puntero al tipo de elemento dado, y dos enteros que indican los índices del primero y último elemento.
Aquí se hace uso del algoritmo OrdenarShell para llevar a cabo la tarea. En la función principal se prueba esta plantilla con arreglos de enteros y flotantes.
Tercer programa
En este programa se implementa, mediante el uso de plantillas la clase NuevaPila, que consiste en una Pila, en la que se pueden llevar a cabo las operaciones como insertar y eliminar datos de la misma, mostrar en pantalla los datos de la pila.
Esta es una pila estática, con un número predefinido de 10 elementos.
En al función principal, se usa una pila de enteros, flotantes y
caracteres para poder llevar a cabo una prueba de la plantilla creada.
Cuarto ejemplo
Mediante el uso de plantillas cree una clase Cola, en la que se puedan llevar a cabo operaciones como: encolar, decolar e imprimir los datos miembro. Realice una función controladora para probar el uso de esta clase.
La clase NodoCola, tiene como amiga a la clase Cola.
Se presenta además una función para las opciones del usuario, y que se encarga de realizar las llamadas a las funciones de las clases. Esta
función es llamada desde main.
En la función main se ha usado como ejemplo una cola de enteros, aunque también se pudo haber usado otro tipo de datos como: char, double, y otros.
#13
C / C++ / Sobrecarga de Operadores en C++
Abril 21, 2010, 04:35:29 PM
La sobrecarga de operadores, aunque puede ser una capacidad exótica, la mayoría de personas las usa implícita y regularmente se valen de los operadores sobrecargados.
Por ejemplo, el operador de suma (+) funciona de manera diferente sobre los enteros, puntos flotantes y dobles. No obstante dicho operador funciona muy bien con las variables int, float y double y varios otros tipos integrados han sido sobrecargados por el propio lenguaje C++.
Los operadores se sobrecargan escribiendo una definición de función (con su encabezado y cuerpo) de manera habitual, excepto que el nombre de la función ahora se vuelve la palabra clave operator, seguida por el símbolo del operador que se sobrecarga. Por ejemplo el nombre de la función operator+ sirve para sobrecargar el operador de suma (+).
Para utilizar un operador sobre objetos de una clase, dicho operador debe ser sobrecargado, con dos excepciones: el operador de asignación (=) puede utilizarse con cualquier clase, sin sobrecarga explícita.
El comportamiento predeterminado del operador (=) es una asignación a nivel de miembros de los datos miembro de la clase. El operador de dirección (&) también puede utilizarse sin sobrecarga con objetos de cualquier clase, simplemente devuelve la dirección de memoria del objeto.
La sobrecarga de operadores no es automática; el programador debe escribir funciones de sobrecarga de operadores que realicen las operaciones deseadas. A veces conviene que estas funciones se hagan funciones miembro, en otras ocasiones conviene que sean funciones friend, ocasionalmente puede hacerse funciones no miembro, no friend.
Es posible llegar a los extremos de la sobrecarga, como sobrecarga, como sobrecargar el operador + para que realice operaciones tipo resta. Tales empleos de la sobrecarga hace que sea muy difícil entender el programa.
Una lista de operadores que pueden o no sobrecargarse es la siguiente:
Operadores que pueden sobrecargarse
+ - * / % ^ ^& |
- ! = < > += -= *=
/= %= A= &= != << >> >>=
<<= == != <= >= && || ++
-- ->* ' -> [ ] ( ) new delete
new [ ] delete []
Operadores que NO pueden sobrecargarse
. .* :: ?: sizeof
Los operadores &, *, + y - tiene versiones unarias y binarias, estas versiones unarias y binarias se pueden sobrecargar por separado.
No es posible crear nuevos operadores; sólo se pueden sobrecargar los operadores existentes, esto desgraciadamente, evita que el programador use notaciones como ** como en BASIC para la exponenciación.
La sobrecarga de un operador de asignación y de uno de suma para permitir instrucciones como:
no implica que el operador += también este sobrecargado para permitir instrucciones como:
tal comportamiento puede lograrse explícitamente sobrecargando el operador += de dicha clase.
La funciones de operador pueden ser funciones miembro o funciones no miembro, estas últimas con frecuencia se hacen friend por razones de desempeño. Las funciones miembro utilizan implícitamente el operador this para obtener uno de los argumentos de su objeto de clase.
Tal argumento de función puede debe listarse explícitamente en una llamada de función no miembro.
Cuando una función de operador se implemente como función miembro, el operador de la izquierda (o el único) debe ser un objeto de clase (o una referencia a un objeto de clase) de la clase del operador. Si el operador de la izquierda debe ser un objeto de una clase diferente o un tipo integrado, esta función operador debe implementarse como función no miembro.
Una función de operador no miembro debe ser friend si necesita acceder directamente a miembros prívate o protected la clase.
Las funciones miembro de los operadores de una clase específica se llaman sólo cuando el operando de la izquierda de un operador binario específicamente es un objeto de esa clase, o cuando el operando de un operador unario es un objeto de esa clase.
Ejemplo
Creación de una clase string y sobrecarga de la mayoría de sus operadores.
Por ejemplo, el operador de suma (+) funciona de manera diferente sobre los enteros, puntos flotantes y dobles. No obstante dicho operador funciona muy bien con las variables int, float y double y varios otros tipos integrados han sido sobrecargados por el propio lenguaje C++.
Los operadores se sobrecargan escribiendo una definición de función (con su encabezado y cuerpo) de manera habitual, excepto que el nombre de la función ahora se vuelve la palabra clave operator, seguida por el símbolo del operador que se sobrecarga. Por ejemplo el nombre de la función operator+ sirve para sobrecargar el operador de suma (+).
Para utilizar un operador sobre objetos de una clase, dicho operador debe ser sobrecargado, con dos excepciones: el operador de asignación (=) puede utilizarse con cualquier clase, sin sobrecarga explícita.
El comportamiento predeterminado del operador (=) es una asignación a nivel de miembros de los datos miembro de la clase. El operador de dirección (&) también puede utilizarse sin sobrecarga con objetos de cualquier clase, simplemente devuelve la dirección de memoria del objeto.
La sobrecarga de operadores no es automática; el programador debe escribir funciones de sobrecarga de operadores que realicen las operaciones deseadas. A veces conviene que estas funciones se hagan funciones miembro, en otras ocasiones conviene que sean funciones friend, ocasionalmente puede hacerse funciones no miembro, no friend.
Es posible llegar a los extremos de la sobrecarga, como sobrecarga, como sobrecargar el operador + para que realice operaciones tipo resta. Tales empleos de la sobrecarga hace que sea muy difícil entender el programa.
Una lista de operadores que pueden o no sobrecargarse es la siguiente:
Operadores que pueden sobrecargarse
+ - * / % ^ ^& |
- ! = < > += -= *=
/= %= A= &= != << >> >>=
<<= == != <= >= && || ++
-- ->* ' -> [ ] ( ) new delete
new [ ] delete []
Operadores que NO pueden sobrecargarse
. .* :: ?: sizeof
Los operadores &, *, + y - tiene versiones unarias y binarias, estas versiones unarias y binarias se pueden sobrecargar por separado.
No es posible crear nuevos operadores; sólo se pueden sobrecargar los operadores existentes, esto desgraciadamente, evita que el programador use notaciones como ** como en BASIC para la exponenciación.
La sobrecarga de un operador de asignación y de uno de suma para permitir instrucciones como:
no implica que el operador += también este sobrecargado para permitir instrucciones como:
tal comportamiento puede lograrse explícitamente sobrecargando el operador += de dicha clase.
La funciones de operador pueden ser funciones miembro o funciones no miembro, estas últimas con frecuencia se hacen friend por razones de desempeño. Las funciones miembro utilizan implícitamente el operador this para obtener uno de los argumentos de su objeto de clase.
Tal argumento de función puede debe listarse explícitamente en una llamada de función no miembro.
Cuando una función de operador se implemente como función miembro, el operador de la izquierda (o el único) debe ser un objeto de clase (o una referencia a un objeto de clase) de la clase del operador. Si el operador de la izquierda debe ser un objeto de una clase diferente o un tipo integrado, esta función operador debe implementarse como función no miembro.
Una función de operador no miembro debe ser friend si necesita acceder directamente a miembros prívate o protected la clase.
Las funciones miembro de los operadores de una clase específica se llaman sólo cuando el operando de la izquierda de un operador binario específicamente es un objeto de esa clase, o cuando el operando de un operador unario es un objeto de esa clase.
Ejemplo
Creación de una clase string y sobrecarga de la mayoría de sus operadores.
#14
C / C++ / Manual de compilacion C/C++ en GCC para GNU/Linux
Abril 21, 2010, 04:31:30 PM
Este manual va dirigido especialmente a las personas que usen GNU/Linux, ya que dicho compilador va incluido con el sistema operativo. Hay que recalcar que este manual no esta ligado a ninguna distribución en particular de GNU/Linux, ya que funciona igual en todas las distros, aunque yo particularmente he usado la distro Mandriva 2009.
Antes de nada, advertir que éste no es un manual de programación en si, ni un manual de C/C++, solo una pequeña guía de uso del GCC.
Para empezar, obviamente después de saber la tarea a realizar y realizar el debido análisis de cómo hacer el programa, hay que elegir si hacerlo en modo texto o en modo gráfico. Yo personalmente creo que debido a que la compilación se va a realizar con la interfaz de comandos, lo haría en modo texto; aunque claro, con un editor de textos como Emacs o Kwrite desde la interfaz gráfica es mas cómodo.
EN MODO TEXTO C Y C++
Para empezar a escribir el código, primero hay que abrir el editor de textos. Para ello, escribimos lo siguiente:
vi nombre_de_archivo.c
Y ya podemos empezar a escribir el código del programa que vayamos a crear. Por ejemplo, queremos crear un programa en el cual se introducen un límite numérico inferior y otro límite numérico superior y que se muestren los números que se encuentran entre dichos límites. Para ello escribimos esto:
Una vez escrito, salimos del editor guardando el archivo (no olvidar que la instrucción para salir es :wq)
Ya guardado, procedemos a compilarlo con la siguiente instrucción
gcc nombre_de_archivo.c
Hay que tener en cuenta que ésta instrucción solo compila, para que además cree el ejecutable, hay que escribir esto:
gcc nombre_de_archivo.c -o nombre_ejecutable
Cuando ya esté compilado y se haya creado el ejecutable (siempre y cuando no haya habido errores de compilación), para abrir el ejecutable hay que escribir lo siguiente:
./nombre_ejecutable
Y así ya está todo hecho.
Ahora, para hacerlo en C++ es casi igual, solo hay que cambiar ciertos detalles.
Para empezar, cuando abramos el editor vi, hay que escribir lo siguiente:
vi nombre_de_archivo.cpp
Así se indica que el código va a ser de C++. Poniendo como ejemplo otra vez el programa de los límites, el código sería:
Cerramos el editor de texto guardando lo escrito. Para compilar y crear el ejecutable, se escribe lo siguiente:
g++ nombre_de_archivo.cpp -o nombre_ejecutable
Y, como en el caso anterior, para ejecutar el programa se ha de escribir la siguiente instrucción:
./nombre_ejecutable
EN MODO GRÁFICO C Y C++
Si te decides a hacerlo en modo gráfico, tienes 2 opciones.
La primera es bajarse un IDE para Linux, como es Eclipse o Anjuta.
La segunda opción es usar el editor de textos Emacs (que viene en todas las distribuciones GNU/Linux) o el Kwrite (éste editor generalmente viene en los entornos KDE, o por lo menos en el de Mandriva 2009)
Ahora bien, si te decantas por escribir el código con el editor Emacs por ejemplo, para compilar el código tienes que abrir una terminal de consola y escribir la instrucción de compilación (gcc.... o g++...)
Antes de nada, advertir que éste no es un manual de programación en si, ni un manual de C/C++, solo una pequeña guía de uso del GCC.
Para empezar, obviamente después de saber la tarea a realizar y realizar el debido análisis de cómo hacer el programa, hay que elegir si hacerlo en modo texto o en modo gráfico. Yo personalmente creo que debido a que la compilación se va a realizar con la interfaz de comandos, lo haría en modo texto; aunque claro, con un editor de textos como Emacs o Kwrite desde la interfaz gráfica es mas cómodo.
EN MODO TEXTO C Y C++
Para empezar a escribir el código, primero hay que abrir el editor de textos. Para ello, escribimos lo siguiente:
vi nombre_de_archivo.c
Y ya podemos empezar a escribir el código del programa que vayamos a crear. Por ejemplo, queremos crear un programa en el cual se introducen un límite numérico inferior y otro límite numérico superior y que se muestren los números que se encuentran entre dichos límites. Para ello escribimos esto:
Una vez escrito, salimos del editor guardando el archivo (no olvidar que la instrucción para salir es :wq)
Ya guardado, procedemos a compilarlo con la siguiente instrucción
gcc nombre_de_archivo.c
Hay que tener en cuenta que ésta instrucción solo compila, para que además cree el ejecutable, hay que escribir esto:
gcc nombre_de_archivo.c -o nombre_ejecutable
Cuando ya esté compilado y se haya creado el ejecutable (siempre y cuando no haya habido errores de compilación), para abrir el ejecutable hay que escribir lo siguiente:
./nombre_ejecutable
Y así ya está todo hecho.
Ahora, para hacerlo en C++ es casi igual, solo hay que cambiar ciertos detalles.
Para empezar, cuando abramos el editor vi, hay que escribir lo siguiente:
vi nombre_de_archivo.cpp
Así se indica que el código va a ser de C++. Poniendo como ejemplo otra vez el programa de los límites, el código sería:
Cerramos el editor de texto guardando lo escrito. Para compilar y crear el ejecutable, se escribe lo siguiente:
g++ nombre_de_archivo.cpp -o nombre_ejecutable
Y, como en el caso anterior, para ejecutar el programa se ha de escribir la siguiente instrucción:
./nombre_ejecutable
EN MODO GRÁFICO C Y C++
Si te decides a hacerlo en modo gráfico, tienes 2 opciones.
La primera es bajarse un IDE para Linux, como es Eclipse o Anjuta.
La segunda opción es usar el editor de textos Emacs (que viene en todas las distribuciones GNU/Linux) o el Kwrite (éste editor generalmente viene en los entornos KDE, o por lo menos en el de Mandriva 2009)
Ahora bien, si te decantas por escribir el código con el editor Emacs por ejemplo, para compilar el código tienes que abrir una terminal de consola y escribir la instrucción de compilación (gcc.... o g++...)
#15
Zona Webmaster / [JavaScript] Tutos en internet
Abril 09, 2010, 03:31:36 PM
El que quiera colaborar que publique! se le ira agregando a la lista y se borrara el post y tambien se le pondra un parantesis con el nombre de quien lo dio!
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Saludos
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Saludos
#16
Otros lenguajes / Re:¿Que lenguaje de programacion aprender primero?
Abril 07, 2010, 05:48:24 PM
Muy buen post! si lo hubiera leido..antes..pero bueno! ya empese y ya estoy sumergido en el lenguaje segun la lista mas dificil de aprender (C++), io estoy dandole duro al C++,aprendo cada dia mas...me parece..en mi opinion que cuando terminer de aprenderlo ( sera un largo camino) pasare a lenguaje web..ya que eso es como lo que seguira en el futuro...de que sirve saber perl o phyton..si te piden que hagas una web y te pagan 100$? si te dicen dame un programa que pueda hacer esto y esto...y solo sabes phyton y lenguajes que no espesifiquen mucho en lo que hay que hacer..pero sabes uno que los consume a todos...? bueno.. psss ese es mi plan..comence con c++, por que pense que es la base de todo ( exepto de Java y quien sabe cual otro) y estaba un poco en lo correcto..pero sigo diciendo..que...mientras mas lenguaje web sepas..mejor..eso si..con c++ aterrizo en el mundo y ya sabre que aprender en cada uno de los lenguajes.. les recomiendo que visiten el lado de C/C++ ya que es uno de los lenguajes basicos y rais de mucho...en fin..esa es solo mi opinon..aunque empesar por lo facil y terminar por lo dificil..no le veo nada de malo...
Saludos!
Saludos!
#18
C / C++ / Re:Ejercicios basico Medio[30 EJers]
Marzo 22, 2010, 04:12:41 PM
#1
#2
#3
Animence! hagan otros!
#2
#3
Animence! hagan otros!
#19
Batch - Bash / Guia para crear Bombas logicas en Batch
Febrero 24, 2010, 08:09:31 PM
Esta es una guia para novatos asi que solo voy a explicar la base de como crear las bombas logicas en batch y algunas cosas que se deben saber...
bombas de tiempo:se activan en fechas particulares o un número determinado de veces
bombas logicas:se activan cuando la computadora cumple una serie de requisitos especificados por su programador (ej:teclado,instalacion o inicio de sesion)
Que lenguaje de programacion usaremos?
ninguno ya que usaremos un archivo de procesamiento por lotes llamado batch (o .bat) este ya se encuentra en el sistema operativo de windows para eso creamos un bloc de notas (inicio,ejecutar y tecleas notepad.exe) colocas el codigo de la bomba y lo guardas en .bat (clip en archivo,guardar como,tecleas bomba.bat y clip en guardar)
Es batch un lenguaje de programacion?
no,ya que es un archivo de procesamiento por lotes que contiene un conjunto de comandos DOS
Sobre las tareas programadas:
Para programarle el tiempo a un archivo ve a panel de control,tareas programadas,agregar tarea programada,siguiente,examinar,seleccinas la localizacion del archivo,abrir,seleccionas cuando quiere que realice la tarea,siguiente,seleccionas la hora y la fecha,siguiente,colocas el nombre de usuario y contraseña y clip en finalizar (si te aparece un mensaje de error de 0x80070005:Acceso denegado es porque el nombre
de usuario y contraseña es incorrecto y el archivo no se ejecutara)...Ahora una bomba de tiempo no hay que hacerle todo ese proceso ya que eso va en su codigo sin necesidad de colocar nombre de usuario o password
sobre el DOS:como el batch usa los comandos del DOS puedes dejar tareas programadas desde el DOS (por si no quieres ejecutar el archivo en la pc de la victima) un ejemplo es ir al DOS (clip en inicio,ejecutar,tecleas cmd y clip en aceptar) y teclear: AT 18:40 msg * Esta es una prueba (asi le aparecera un mensaje a esa hora) aparte de eso puedes ver los comandos del DOS por ejemplo para ver el de las tareas programadas tecleas at/ para ver los comandos de shutdown tecleas shutdown (tecnica usada en la bomba 7)
configuraciones del reloj:en algunos casos las configuraciones del reloj en las computadoras son diferentes por ejemplo unas usan hora militar y otras usar am o pm en ese caso la bomba de tiempo tiene que ser configurada de acuerdo al tipo de hora de la computadora...
Ver el codigo de la bomba o editarlo:clip derecho a la bomba y luego editar
-------------------------------COMENZAMOS----------------------------------------------
Crea un un bloc de notas (inicio,ejecutar y tecleas notepad.exe) colocas el codigo de la bomba y lo guardas en .bat (clip en archivo,guardar como,tecleas bomba.bat y clip en guardar)
Codigos de las bombas:
1.Codigo de la bomba logica que apaga la computadora de la victima:
AT 18:43 SHUTDOWN -s -f -t 00
2.Codigo de la bomba logica que deja un mensaje a la victima:
AT 18:40 msg * Esta es una prueba
Autor: W-Root
bombas de tiempo:se activan en fechas particulares o un número determinado de veces
bombas logicas:se activan cuando la computadora cumple una serie de requisitos especificados por su programador (ej:teclado,instalacion o inicio de sesion)
Que lenguaje de programacion usaremos?
ninguno ya que usaremos un archivo de procesamiento por lotes llamado batch (o .bat) este ya se encuentra en el sistema operativo de windows para eso creamos un bloc de notas (inicio,ejecutar y tecleas notepad.exe) colocas el codigo de la bomba y lo guardas en .bat (clip en archivo,guardar como,tecleas bomba.bat y clip en guardar)
Es batch un lenguaje de programacion?
no,ya que es un archivo de procesamiento por lotes que contiene un conjunto de comandos DOS
Sobre las tareas programadas:
Para programarle el tiempo a un archivo ve a panel de control,tareas programadas,agregar tarea programada,siguiente,examinar,seleccinas la localizacion del archivo,abrir,seleccionas cuando quiere que realice la tarea,siguiente,seleccionas la hora y la fecha,siguiente,colocas el nombre de usuario y contraseña y clip en finalizar (si te aparece un mensaje de error de 0x80070005:Acceso denegado es porque el nombre
de usuario y contraseña es incorrecto y el archivo no se ejecutara)...Ahora una bomba de tiempo no hay que hacerle todo ese proceso ya que eso va en su codigo sin necesidad de colocar nombre de usuario o password
sobre el DOS:como el batch usa los comandos del DOS puedes dejar tareas programadas desde el DOS (por si no quieres ejecutar el archivo en la pc de la victima) un ejemplo es ir al DOS (clip en inicio,ejecutar,tecleas cmd y clip en aceptar) y teclear: AT 18:40 msg * Esta es una prueba (asi le aparecera un mensaje a esa hora) aparte de eso puedes ver los comandos del DOS por ejemplo para ver el de las tareas programadas tecleas at/ para ver los comandos de shutdown tecleas shutdown (tecnica usada en la bomba 7)
configuraciones del reloj:en algunos casos las configuraciones del reloj en las computadoras son diferentes por ejemplo unas usan hora militar y otras usar am o pm en ese caso la bomba de tiempo tiene que ser configurada de acuerdo al tipo de hora de la computadora...
Ver el codigo de la bomba o editarlo:clip derecho a la bomba y luego editar
-------------------------------COMENZAMOS----------------------------------------------
Crea un un bloc de notas (inicio,ejecutar y tecleas notepad.exe) colocas el codigo de la bomba y lo guardas en .bat (clip en archivo,guardar como,tecleas bomba.bat y clip en guardar)
Codigos de las bombas:
1.Codigo de la bomba logica que apaga la computadora de la victima:
AT 18:43 SHUTDOWN -s -f -t 00
2.Codigo de la bomba logica que deja un mensaje a la victima:
AT 18:40 msg * Esta es una prueba
Autor: W-Root
#20
Batch - Bash / Minijueguito en Batch [Maze Madness]
Febrero 24, 2010, 12:31:29 AM
Bueno es un juego simple de Batch, el objetivo es hacer que la bola llegue a la X usando el teclado
Es sencillito pero entretenido por un ratico XD en fin a mi me gusto..No te caigas
aqui esta el Code
Autor:Splendit
Saludos!
Es sencillito pero entretenido por un ratico XD en fin a mi me gusto..No te caigas
aqui esta el Code
Autor:Splendit
Saludos!