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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sobrecargar Operador por defecto de una clase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sobrecargar Operador por defecto de una clase  (Leído 1,857 veces)
SubAtomicParticula

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Sobrecargar Operador por defecto de una clase
« en: 2 Agosto 2017, 11:05 am »

Saludos, quisiera saber si existe un operador por defecto en una clase c++ y si se puede sobrecargar.

Lo que tengo es una clase Cadena que almacena un array char *texto, declarado privado.

Pero cuando necesito usar ese texto en una función típica de API de Win32 necesito pasar el puntero al array como es lógico y para ello uso el operador(), pero no me parece elegante, ejemplo:

Cadena Titulo("Hola");
SetWindowText(hWnd,Titulo());

Quisiera conseguir esto:

Cadena Titulo("Hola");
SetWindowText(hWnd,Titulo);

Puede que haya que sobrecargar el Operador= pero no se como diferenciarlo del operador de asignación que ya está sobrecargado.

Gracias, un saludo.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobrecargar Operador por defecto de una clase
« Respuesta #1 en: 2 Agosto 2017, 12:55 pm »

Tienes operadores para convertir tipos. Su declaración es:
Código
  1. operator <tipo>();
  2. operator int();

Aquí es importante ver la importancia de la palabra "explicit":
Código
  1. explicit operator int();

Con explicit, solo podrás hacer la conversión haciendo un cast manualmente (por ejemplo, (int)a)

Un ejemplo de todo esto:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. class A {
  7. public:
  8.    operator int(){
  9.        return 1;
  10.    }
  11.  
  12.    explicit operator const char*(){
  13.        return "_1";
  14.    }
  15. };
  16.  
  17. int main(){
  18.    A a;
  19.  
  20.    int n = a;
  21.  
  22.    const char* c = (const char*)a;
  23.  
  24.    cout << a << c << endl;
  25. }

De todos modos, cuidado con implementar estos operadores sin la palabra explicit. En caso de errores o confusiones, estos operadores pueden ocultar el error. Por ejemplo:
Código
  1. class A {
  2. public:
  3.    operator int*(){
  4.        return nullptr;
  5.    }
  6. };
  7.  
  8. int main(){
  9.    A a;
  10.  
  11.    void* n = &a;
  12.    void* m = a; // Nos hemos olvidado el ampersand, y como la conversión de int* a void* es implícita también, no da problema.
  13. }


Siempre que implementes estos operadores, suele ser buena idea proveer además un método "normal" de conversión, tipo "getCString()"


« Última modificación: 2 Agosto 2017, 13:01 pm por ivancea96 » En línea

SubAtomicParticula

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Sobrecargar Operador por defecto de una clase
« Respuesta #2 en: 2 Agosto 2017, 21:12 pm »

Muchas gracias, me sirve para lo que quería.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sobrecargar el operador <<
Programación C/C++
<<<-Basura->>> 4 2,014 Último mensaje 11 Junio 2013, 22:38 pm
por <<<-Basura->>>
No puedo sobrecargar el operador ostream
Programación C/C++
ElRodrik 5 2,562 Último mensaje 28 Mayo 2015, 04:07 am
por Peregring-lk
Laravel - Clase Model, sobrecargar métodos principales
PHP
fran800m 2 3,233 Último mensaje 9 Enero 2017, 00:03 am
por fran800m
¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]
Scripting
Yidu 2 2,860 Último mensaje 15 Enero 2017, 18:31 pm
por Yidu
Problema al sobrecargar el operador +
Programación C/C++
cNoob 8 3,954 Último mensaje 20 Diciembre 2017, 15:24 pm
por cNoob
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines