elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 125
101  Programación / Programación C/C++ / Re: Sobrecarga operador + en: 6 Febrero 2015, 08:04 am
Entonces, "const Foo& f" es lo mismo que "Foo const&  f"?

Es lo mismo sí.

Hay alguna manera de hacer "constante referencia  a Foo" y no "referencia a Foo constante"?

Foo& variable -> "constante referencia a Foo"
const Foo& variable -> "referencia a Foo constante"

Cuando declaras una referencia, el compilador te obliga a darle un valor en ese mismo momento. Despuées de la inicialización, verás que no vas a poder modificar la referencia. Es decir, el enlace de referencia es constante siempre. Debido a esto, el modificador "const" únicamente tiene sentido si amplía la cobertura... y de la única forma en la que puede hacer esto es haciendo que la clase o variable sea de solo lectura.

PD, creo que correctamente seria asi el la sobrecarga de +?
Código
  1. Foo operator+(const Foo& f)
  2. {
  3.        Foo b;
  4. b.bar_ = this->bar_ + f.bar_;
  5. return b;
  6. }
  7.  

Es una forma de implementarlo... ahora, si Foo tiene un constructor que permite inicializar "bar_", es un poco más eficiente llamar a dicho constructor:

Código
  1. Foo operator+(const Foo& f) const
  2. {
  3.        return Foo{ bar_ + f.bar_ };
  4. }

Por cierto, nota el "const" de la función... los operadores que no tienen el igual no deberían modificar la instancia actual y deberían, por tanto, ser "const". Puede parecer una tontería, pero ya has visto que si un miembro no tiene el modificador "const" no puedes usarlo en una función "const".

Y tambien, + tendria que devolver objeto  nuevo mientras que += referencia al objeto?

A ver, el operador "+" tiene que devolver un objeto nuevo porque, como te he comentado antes, este operador no debe modificar la instancia actual. Crear un objeto nuevo responde a la necesidad de devolver el resultado en un objeto que no sea el actual.

El operador "+=" si que tiene que modificar la instancia actual y, dado que al finalizar la función la instancia actual tendrá el valor bueno, suele ser más eficiente devolver una referencia que crear un objeto nuevo basado en el valor actual.

Espero haberte resuelto las dudas.

Un saludo.
102  Programación / Programación C/C++ / Re: Sobrecarga operador + en: 5 Febrero 2015, 15:55 pm
getbar no es const, no puedes llamar a un método "no const" desde una referencia "const".

Por otro lado, el otro ejemplo que has puesto:

Código
  1. Fred operator+ (Fred const& x, Fred const& y);

Este ejemplo únicamente compila si el operador se sobrecarga fuera de la clase "Fred". Eso sí, para asegurar un funcionamiento óptimo lo suyo es hacer que este método sea "friend" de la clase "Fred".
103  Programación / Programación C/C++ / Re: Sumar día a una fecha en: 5 Febrero 2015, 08:10 am
Corregi el programa pero me sigue sin andar

Vamos a intentar ser un poco serios. Se supone que tienes que aprender y pegarte un poco con el problema. El foro está para servirte de ayuda, pero tienes que aprender a valerte por tí mismo:

* Aprende a interpretar los mensajes de error: si no entiendes alguno busca información en google.
* Aprende las reglas de codificación. Sería recomendable para este punto que consiguieses un buen manual de C para futuras referencias
* Se paciente. O aprendes a tener paciencia con los problemas o no vas a pasar nunca de la línea de salida.

No tiene sentido que estés poniendo una versión del programa cada vez que cambias dos letras solo para repetir... "no funciona". Tienes que intentar valerte por tí mismo.

* Si el código no te compila, lee e interpreta los mensajes de error.
* Si el código compila pero no funciona como es debido, aprende a usar el depurador de código. Es una herramienta muy poderosa y algo totalmente imprescindible en el mundo de la programación.

Un saludo.
104  Programación / Programación C/C++ / Re: Error en ejercicio de exponencial en: 4 Febrero 2015, 16:43 pm
El tipo int tiene un tamaño típico de 32 bits, de los cuales uno lo utiliza para identificar el signo del número (positivo o negativo).

El número más alto que puedes representar con un int típico es 2^31 = 2.147.483.648. Cualquier número más alto que este va a ser imposible almacenarlo en un "int". Es a partir de este punto cuando el programa empezará a funcionar raro.

Por otro lado, si yo cojo y hago:

Código
  1. int entero = 2000000000;
  2. double valor = (double)( entero * 2 );

El resultado almacenado en "valor" va a ser incorrecto porque la operación "entero * 2" se realiza con tipo "int" y después se coge ese resultado y se almacena como double.

Hay librerías que disponen de formatos para trabajar con números todo lo grandes que tu quieras, pero creo que ya es algo que se escapa al alcance de la práctica. Si tu ejercicio funciona bien mientras no se desborde el int, puedes dar tu práctica como buena.

Un saludo
105  Programación / Programación C/C++ / Re: Sumar día a una fecha en: 4 Febrero 2015, 16:33 pm
El detector de años bisiestos está mal: Un año es bisiesto si es divisible entre 400, también es bisiesto si es divisible entre 4 y no es divisible entre 100.

Por otro lado, el lenguaje C no admite 'ñ' en el nombre de las variables. Esto si dedicas un poco de esfuerzo a leer los mensajes de error lo ves en seguida. Ya eres mayorcito y tienes que aprender a leer y entender este tipo de información.

"IngrDato" guarda los datos en una variable local llamada "fecha"... pero esa variable muere cuando el código sale de la función. ¿No te faltará un return?

La función "SumaUnDia" no está. Me da la sensación de que no la has implementado porque tampoco está el prototipo de la función... Este error también te aparece claramente al compilar, lo dicho, aprende a interpretar esos mensajes que te salen.

Un saludo.
106  Programación / Programación C/C++ / Re: Duda con extern "C" en: 3 Febrero 2015, 13:08 pm
código objeto es código precompilado... como sabes la compilación en C y C++ se realiza en dos pasos... primero se genera código objeto y después ese código objeto se transforma en código binario ejecutable
107  Programación / Programación C/C++ / Re: Listar niveles Árbol n-ario en: 3 Febrero 2015, 12:33 pm
Para conseguir esa salida puedes optar por una función del tipo:

Código
  1. int mostrarNiveles(nodo *nodo_actual, int nivel );

La llamada principal debería ser algo del tipo:

Código
  1. int nivel = 0;
  2. while( mostrarNiveles( raiz, nivel ) )
  3.  nivel++;

Esto es, se llama a la función en bucle y, en cada iteración, se incrementa el valor de "nivel". Esta variable te debería permitir imprimir únicamente un nivel del árbol. Para ello puedes, por ejemplo, seguir la siguiente secuencia en "mostrarNiveles":

* si el nivel es 0, imprimo el valor actual y salgo de la función retornando 1
* decremento el valor de nivel
* Si tengo hijos, llamo a "mostrarNiveles" pasando como nodo actual mis dos hijos.
* Si no tengo hijos retorno "0"

Falta algún detalle por incluir para que funcione bien, como poner los saltos de línea, pero vale para un pseudocódigo.
108  Programación / Programación C/C++ / Re: Listar niveles Árbol n-ario en: 3 Febrero 2015, 07:47 am
¿y qué tienes hecho hasta ahora?

¿Dónde te atascas?

No se hacen tareas... si no aportas nada no creo que ayude demasiado.
109  Programación / Programación C/C++ / Re: Función esfechavalida que valide de forma separada en: 2 Febrero 2015, 17:10 pm
PD: eferion no se si lo dijiste con animo de pelear o algo pero ese nunca fue mi interés así que pensare que tampoco el tuyo  :xD (lamento si hubo un mal entendido)

Para nada... pelear en el foro no lleva a ninguna parte.

Únicamente he intentado exponer mi punto de vista... aunque todos sabemos que los foros no son especialmente buenos a la hora de transmitir emociones salvo que te dediques a poner veinte emoticonos por cada palabra escrita  :xD

Un saludo.
110  Programación / Programación C/C++ / Re: Función esfechavalida que valide de forma separada en: 2 Febrero 2015, 16:52 pm
Buaaa pero que pasa si quiere el año y el día, o el mes el día y el año tendría que tener números para cada combinación  :xD

Retornar un string con el mensaje de error es una mala idea porque esa solución plantea un problema de acomplamiento. Te limita el uso de esa función a un único idioma.

Puedo aceptar que se diga que la función es muy sencilla y que no es para nada serio... pero dado que está aprendiendo es mejor evitar malos vicios como el que comentas de devolver el string.

Por otro lado, yo no planteaba mi solución bajo la posibilidad de que la función pudiese indicar algo del tipo "el día y el mes no son válidos"... lo suyo sería o bien decir directamente que la fecha no es válida o bien soltar un mensaje del tipo "el año no es válido" y, una vez corregido el año, avisar de que el mes no es válido.
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 125
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines