Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup es.comp.lenguajes.* Foro > Newsgroup es.comp.lenguajes.c++
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 22-08-2007, 01:39:35
R.G.A.M.
 
Mensajes: n/a
Predeterminado Sobrecarga del Operador "==" para Cadena de Caracteres

Realicé el siguiente algoritmo para que el operador "==", al aplicar
entre dos cadenas de caracteres, devuelva el valor de verdad de la
igualdad exacta de ambas cadenas de caracteres:

1. #include <cstdlib>
2. #include <iostream>
3.
4. using namespace std;
5.
6. bool operator == (char *cadena1, char *cadena2)
7. {
8. bool temp = true;
9.
10. if (strlen(cadena1) != strlen(cadena2))
11. temp = false;
12. else
13. {
14. for (int i = 0; i <= strlen(cadena1); ++i)
15. {
16. if (cadena1[i] != cadena2[i])
17. temp = false;
18. }
19. }
20.
21. return temp;
22. }

Y surge el siguiente error, para la línea 7:

`bool operator==(char*, char*)' must have an argument of class or
enumerated type

¿Consejos? Me sería útil recibir algo de ayuda. Gracias por adelantado.

Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #3 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #4 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #5 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #6 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #7 (permalink)  
Antiguo 22-08-2007, 13:13:24
Bartomeu
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

El error del compilador te lo dice muy claro. Generalizando: las funciones
'operator' necesitan que al menos un argumento sea una clase o un enum. No
se pueden redefinir para los tipos básicos. La razón es evitar malas ideas.

Por ejemplo, podrías tener la idea de hacer
bool operator==(double d1, double d2) {
// Algoritmo para sólo comprobar hasta dos decimales e ignorar el resto
}
Si esta operación la incluyeras en tu programa, tú sabrias lo que haces y
probablemente el programa haría lo que pretendes (diría que si comparando
3,141183 y 3,147895), pero también podrías estar cambiando cualquier
comparación de doubles de cualquier librería que utilizaras. Es más, cuando
repasarás el programa después de algún tiempo probablemente no recordarías
que el igual de doubles no es el estandar y tendrías poblemas para el
mantenimiento del programa a largo plazo.

De todas maneras, si se pudiera hacer, yo lo haría así:

bool operator==(const char *cadena1, const char *cadena2) {
while (*cadena1 && *cadena2)
if (*(cadena1++ )!= *(cadena2++))
return false;
return *cadena1 == *cadena2;
}

Aunque lo mas simple es utilizar "!strcmp(cadena1,cadena2)"



Responder Con Cita
  #8 (permalink)  
Antiguo 23-08-2007, 00:08:30
R.G.A.M.
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

Comprendo lo que me dices. Mi interés era sobrecargar el operador
y grabar en una librería (o cabecera, como gustes llamar), para
facilitar a una persona el trabajo con C++. Como verificar la
veracidad "cadena1 == cadena2" no te dice que cada caracter de uno es
idéntico a otro (en los lugares correspondientes, como ejemplo "hola"
== "hola"), quise sobrecargar dicho operador a una función que me
parecía lógica.

Aunque me falta mucho para ser experto en C++, tengo un buen
dominio de ciertas propiedades del lenguaje (llevo como cuatro meses
practicando el lenguaje, y he aprendido considerablemente para lo que
esperaba). Los trabajos que realizamos (estudiante de nivel secundario
en un colegio soy), los demás hacen mediante Quick Basic. Como me
dieron la certeza de que trabajaría con C++ (pues me resulta más
fácil), y se debe trabajar en parejas, la otra persona debe acomodarse
a la sintaxis, pero no está preparada para comprender todos los
pormenores del lenguaje, y quiero simplificar la tarea.


Responder Con Cita
  #9 (permalink)  
Antiguo 23-08-2007, 00:08:30
R.G.A.M.
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

Comprendo lo que me dices. Mi interés era sobrecargar el operador
y grabar en una librería (o cabecera, como gustes llamar), para
facilitar a una persona el trabajo con C++. Como verificar la
veracidad "cadena1 == cadena2" no te dice que cada caracter de uno es
idéntico a otro (en los lugares correspondientes, como ejemplo "hola"
== "hola"), quise sobrecargar dicho operador a una función que me
parecía lógica.

Aunque me falta mucho para ser experto en C++, tengo un buen
dominio de ciertas propiedades del lenguaje (llevo como cuatro meses
practicando el lenguaje, y he aprendido considerablemente para lo que
esperaba). Los trabajos que realizamos (estudiante de nivel secundario
en un colegio soy), los demás hacen mediante Quick Basic. Como me
dieron la certeza de que trabajaría con C++ (pues me resulta más
fácil), y se debe trabajar en parejas, la otra persona debe acomodarse
a la sintaxis, pero no está preparada para comprender todos los
pormenores del lenguaje, y quiero simplificar la tarea.


Responder Con Cita
  #10 (permalink)  
Antiguo 23-08-2007, 00:08:30
R.G.A.M.
 
Mensajes: n/a
Predeterminado Re: Sobrecarga del Operador "==" para Cadena de Caracteres

Comprendo lo que me dices. Mi interés era sobrecargar el operador
y grabar en una librería (o cabecera, como gustes llamar), para
facilitar a una persona el trabajo con C++. Como verificar la
veracidad "cadena1 == cadena2" no te dice que cada caracter de uno es
idéntico a otro (en los lugares correspondientes, como ejemplo "hola"
== "hola"), quise sobrecargar dicho operador a una función que me
parecía lógica.

Aunque me falta mucho para ser experto en C++, tengo un buen
dominio de ciertas propiedades del lenguaje (llevo como cuatro meses
practicando el lenguaje, y he aprendido considerablemente para lo que
esperaba). Los trabajos que realizamos (estudiante de nivel secundario
en un colegio soy), los demás hacen mediante Quick Basic. Como me
dieron la certeza de que trabajaría con C++ (pues me resulta más
fácil), y se debe trabajar en parejas, la otra persona debe acomodarse
a la sintaxis, pero no está preparada para comprender todos los
pormenores del lenguaje, y quiero simplificar la tarea.


Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
Re: Lo dice el Tío Retailas, """ No hay duda """ """" Yo soy el suplantador de Tex y de libera """"" """" Me ha pillado """""" Suzudo Newsgroup es.charla.religion 8 30-03-2008 15:22:56
Re: Lo dice el Tío Retailas, """ No hay duda """ """" Yo soy el suplantador de Tex y de libera """"" """" Me ha pillado """""" El Oxito Del Arco Iris Newsgroup es.humanidades.derecho 10 29-03-2008 13:42:14
Lo dice el Tío Retailas, """ No hay duda """ """" Yo soy el suplantador de Tex y de libera """"" """" Me ha pillado """"""&qu El Oxito Del Arco Iris Newsgroup es.charla.religion 0 27-03-2008 11:34:53
Sobrecarga del Operador "==" para Cadena de Caracteres R.G.A.M. Newsgroup es.comp.lenguajes.c++ 0 22-08-2007 01:39:35
Sobrecarga del Operador "==" para Cadena de Caracteres R.G.A.M. Newsgroup es.comp.lenguajes.c++ 0 22-08-2007 01:39:35





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.