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.
Tienes operadores para convertir tipos. Su declaración es:
operator <tipo>();
operator int();
Aquí es importante ver la importancia de la palabra "explicit":
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:
#include <iostream>
using namespace std;
class A {
public:
operator int(){
return 1;
}
explicit operator const char*(){
return "_1";
}
};
int main(){
A a;
int n = a;
const char* c = (const char*)a;
cout << a << c << endl;
}
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:
class A {
public:
operator int*(){
return nullptr;
}
};
int main(){
A a;
void* n = &a;
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.
}
Siempre que implementes estos operadores, suele ser buena idea proveer además un método "normal" de conversión, tipo "getCString()"
Muchas gracias, me sirve para lo que quería.
Un saludo.