FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
hacer a->b->c(); con una clase
hola amigos, tengo una clase en la que habrá métodos y quiero que por ejemplo haya una estructura con mas metodos. Por ejemplo, la estructura int que contenga a tofloat, tohex, y tobin. Entonces, poder hacer clase->int->tobin(); ¿Como hago eso? Se me ocurrio crear esos metodos como privados y luego crear una estructura dentro del public con punteros a esos metodos pero no se si es correcto y si se podria hacer.
|
#2
|
||||
|
||||
Código:
class TInt { private: int I; public: float ToFloat(); char ToHex(); }; class TClase { public: TInt Int; float ToFloat(); char ToHex(); }; //........................................ void funcion() { TClase C; C.Int.ToFloat(); } Saludos. |
#3
|
||||
|
||||
bueno ¿Y si la clase que contiene las funciones tiene que poder trabajar con variables y objetos que estan declarados en el private de la otra clase? Ese es el caso concreto. Ya lo he conseguido pero en vez de usar otra clase he creado una estructura en el public de la clase y en esa estructura hay punteros a los metodos, los cuales se declaran en el private de la misma clase. Para poder hacer que se trague esto tuve que usar __closure* que no se ni que es. Tambien en el constructor de la clase asigno a los punteros los metodos que tengo definidos. Luego cuando llegue a casa pongo lo que hice a ver si te parece correcto o no. Solo un detalle y esque cuando hago uso de la funcion, al escribirla me aparece en lalista y le doy pero aparece sin parentesis al final y se lo tengo que poner yo junto con el parametro.
|
#4
|
||||
|
||||
Bueno ya estoy por casa. Al final he guardado el que usa __closure porque funciona pero estoy intentando arreglarlo asi:
En el constructor: Código:
TPrueba::TPrueba() { //Creo la estructura Conversion = new TIPOS; //Inicializacion de las funciones de la estructura para los Anti-Anti-Debug Conversion->toFloat = &toFloat; Conversion->toBin = &toBin; } Código:
//Declaracion del tipo de estructura para los Anti-Anti-Debug struct TIPOS{ AnsiString __fastcall (TPrueba::*toFloat(int)); AnsiString __fastcall (TPrueba::*toBin(int)); }*Conversion; Código:
AnsiString __fastcall toFloat(int); AnsiString __fastcall toBin(int); Código:
AnsiString __fastcall TPrueba::toFloat(int value) { return ""; } //--------------------------------------------------------------------------- AnsiString __fastcall TPrueba::toBin(int value) { return ""; } Código:
Prueba = new TPrueba(); AnsiString Float = Prueba->Conversion->toFloat(1000); AnsiString Bin = Prueba->Conversion->toBin(1000); Código:
[C++ Error] TPrueba.cpp(16): E2235 Member function must be called or its address taken [C++ Error] TPrueba.cpp(17): E2235 Member function must be called or its address taken |
#5
|
||||
|
||||
Esto funciona pero usa __closure: http://pastebin.com/czvfhEj8
Ya que hago algo me gustaria hacerlo lo mas correcto posible. Podria declarar sin problema los metodos como publicos y no tendria problemas ni tendria que crear una estructura o clase ni nada pero estarián desordenados, o sea, no podria crear un orden como el que he creado ahi. O sea, que si voy a trabajar con cadenas pues al poner un -> me salgan todos los metodos para cadenas, si voy a trabajar con enteros pues que al poner el -> que me salgan solo los que sirvan para enteros y asi con todo. Mas o menos lo que hace Builder cuando haces un Edit1->Text.sprintf("%i",9) que como ves te muestra la funcion sprintf. |
#6
|
||||
|
||||
Lo ultimo que he probado pero no soy capaz de hacerlo compilar es esto: http://pastebin.com/4Pd9DYEr
El problema lo tenemos en la funcion miembra de TInt que no soy capaz de asignar el valor de entrada a la direccion donde apunta el puntero ni tampoco mostrar su valor. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar mi clase a una clase de 3 capas o lo mas parecido | elarys | OOP | 2 | 07-04-2011 23:02:54 |
clase que contiene otra clase definida de forma posterior | astwin | OOP | 5 | 20-02-2009 11:26:55 |
Es posible hacer una nueva clase de componente ?? | ilichhernandez | OOP | 7 | 05-05-2008 16:01:30 |
Clase | jakuna | OOP | 2 | 30-08-2007 21:50:35 |
Clase para hacer ABM | mateamargo | OOP | 3 | 25-10-2005 22:34:23 |
|