Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sobrecarga de operator+ en tipos primitivos

Estas en el tema de Sobrecarga de operator+ en tipos primitivos en el foro de C/C++ en Foros del Web. Como puedo hacer que el operador de suma (+) concatene automaticamente dos char* . Tengo una idea de como sobrecargar este operador con una clase ...
  #1 (permalink)  
Antiguo 24/02/2012, 14:42
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 5
Sobrecarga de operator+ en tipos primitivos

Como puedo hacer que el operador de suma (+) concatene automaticamente dos char* . Tengo una idea de como sobrecargar este operador con una clase string pero no encuentro informacion sobre como hacer esta sobrecarga con tipos primitivos.

Y si no tengo mas eleccion, entonces como puedo hacer que las comillas hagan referencia a una clase string en lugar de una cadena de char??

Alguien que me ayude, eso de crear un objeto por cada string que quiero concatenar es muy tedioso y es lo mismo si tengo que llamar una funcion cuando seria mas facil escribir solo un simbolo de mas asi como otros lenguajes lo implementan por ejemplo java o python, este ultimo hace maravillas con los operadores.
  #2 (permalink)  
Antiguo 24/02/2012, 15:22
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Sobrecarga de operator+ en tipos primitivos

Pero este ultimo no es tan trasparente para el usuario. Estos son los pro y las contras de un lenguaje con otro. Si te gusta la comodidad usa los otros lenguajes. Si te gusta la trasparencia en el manejo de la memoria que tiene C usalo.
Son cuestiones de gustos.

Ahora sobre tu duda. Esto es posible.

string s = "Hola ";
s += " Martin ";

La clase string tiene sobrecargado el + para char*
  #3 (permalink)  
Antiguo 24/02/2012, 15:22
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 13 años
Puntos: 25
Respuesta: Sobrecarga de operator+ en tipos primitivos

una pregunta, eso lo tenes que hacer como ejercicio para algo?, porque si no es asi, podes usar la funcion char* strcat(char* destination, const char* source) que te va a concatenar 2 cadenas de tipo char.

Código C++:
Ver original
  1. char primero[20]= "hola ";
  2. char segundo[20]= "mundo!";
  3.  
  4. strcat(primero, segundo);
  5. //ahora primero = "hola mundo!"


para las variables de tipo string el operador + ya se encuentra sobrecargado.

Código C++:
Ver original
  1. string primero= "hola ";
  2. string segundo= "mundo!";
  3.  
  4. primero= primero + segundo;
  5. //ahora primero = "hola mundo!";

ahora si queres usar una variable de tipo char y otra string y concatenar estas 2, convertis la variable string a char con la fundion c_str() y usas strcat:

Código C++:
Ver original
  1. char primero[20]= "hola ";
  2. string segundo= "mundo!";
  3.  
  4. strcat(primero, segundo.c_str());
  5.  
  6. //ahora primero= "hola mundo!"
  #4 (permalink)  
Antiguo 24/02/2012, 19:36
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años, 8 meses
Puntos: 5
Respuesta: Sobrecarga de operator+ en tipos primitivos

Solo decia que es mas facil escribir un simbolo en lugar de tener que estar llamando a la funcion strcat o snprintf, ademas usaria muchas lineas de mas haciendolo como el usuario @sam90 y strcat me ha dado muchos problemas cuando concateno tipos de datos distintos como un chararray con un puntero a chars .
Mi pregunta es se puede de alguna forma modificar el comportamiento del operador de suma para concatenar tipos primitivos y como (un ejemplo si se puede).
Alguna forma de hacerlo con assembly, nada?

Última edición por shujidan; 26/02/2012 a las 00:15
  #5 (permalink)  
Antiguo 28/02/2012, 08:20
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 9 meses
Puntos: 22
Respuesta: Sobrecarga de operator+ en tipos primitivos

Cita:
Alguien que me ayude, eso de crear un objeto por cada string que quiero concatenar es muy tedioso y es lo mismo si tengo que llamar una funcion cuando seria mas facil escribir solo un simbolo de mas asi como otros lenguajes lo implementan por ejemplo java o python, este ultimo hace maravillas con los operadores.
Como ya comentaste "otros lenguajes lo implementan", C++ no. En C++ no puedes sobrecargar operadores para tipos primitivos, únicamente para tipos definidos por el usuario (clases), debes tomar en cuenta que un literal de cadena en Java en realidad no es un tipo primitivo sino es tratado como un objeto String, en fin, esto ya es cuestión del nivel de abstracción que maneja cada lenguaje de programación, entre más alto más fácil de entender y manejar, pero menos control tal vez, en fin pros y contras que mencionó sam90. En caso de C++ se pudieron haber tratado las cadenas de forma en como sucede en Java y Python, pero debemos recordar que la base de C++ es C, entonces por cuestiones de eficiencia, compatibilidad y algunas otras cuestiones esto no es la opción. Utiliza la clase string de C++ y convierte en caso de ser necesario los literales de cadena en objetos string("micadena"), si quieres concatenar objetos de otros tipos tambien puedes hacerlo creando conversiones por constructor o conversiones por operador. En caso de C es todavía más trabajo tratar con cadenas (el nivel de abstracción es menor).

Etiquetas: clase, funcion, operator, sobrecarga, string, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:47.