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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7
1  Programación / Programación C/C++ / alguna forma de pasar una funcion miembro como argumento a otro miembro de clase? en: 2 Abril 2022, 20:56 pm
Buenas tardeS

Tengo 2 objetos:
ClaseA
ClaseB

ClaseA tiene una referencia a ClaseB en su cuerpo, pero ClaseB no debe tener referencia a ClaseA

Código
  1. //ClaseA
  2. class ClaseA {
  3.  
  4. private:
  5.    ClaseB* b {nullptr};
  6.  
  7. public:
  8.   void Alpha();
  9.  
  10. };
  11.  
  12.  
  13. //ClaseB
  14. class ClaseB {
  15. public:
  16.    void Beta();
  17. };


Lo que busco hacer es llamar desde ClaseA::Alpha() a ClaseB::Beta(), luego ClaseB::Beta() debe invocar a ClaseA::Alpha() de vuelta.


Código
  1. //ClaseA fuente
  2. void ClaseA::Alpha(){
  3.     //hacer algo
  4.     b->Beta();      //invoco a ClaseB::Beta()
  5.  
  6. }
  7.  
  8. //ClaseB fuente
  9. void ClaseB::Beta(){
  10.     //el hilo proveniente de ClaseA::Alpha pasa por aqui...
  11.     //hacer algo
  12.     //invocar de vuelta a ClaseA::Alpha() desde un principio...
  13. }


Pienso que puedo colocar algun parametro en ClaseB::Beta(), por ejemplo:

ClaseB::Beta(algun tipo o puntero a funcion miembro que apunte a la funcion anterior)

Entonces la invocacion seria:
Código
  1. b->Beta(&ClaseA::Alpha);

...cosa que al terminar Beta, ya sabe que funcion tiene que invocar despues, en este caso ClaseA::Alpha

Como se puede lograr esto?

gracias de antemano.

2  Programación / Programación C/C++ / localizacion de funciones o metodos.. en: 4 Febrero 2022, 01:32 am
Buen dia o tades

Antes veia a las funciones como un puñado de procedimientos, pero despues de ver un video me entro la duda, y me da la espina que inclusive las funciones se alojan en una direccion de memoria, lo digo porque hay punteros a funciones...

Mi duda es,  como se almacena una funcion en memoria?.. es acaso la primera celda donde comienza el primer tipo local generado?

Ej:

Código
  1. void una_funcion (){      //donde se localiza ?
  2.     int x = 0;    //0x0003425   (direccion en la ram donde se localiza x)
  3. }

No es que se localice una celda antes que 0x0003425 ?

Saludos
3  Programación / Programación C/C++ / Typeid de tipos básicos en: 2 Noviembre 2021, 13:26 pm
buenas

Al imprimir en el terminal el nombre del tipo de unas variable me imprime solo la primera letra.

Código
  1. int m = 6;
  2. std::cout << typeid(m).name();

Imprime: i
Es eso debido al compilador? Estoy usando Linux

Saludos

MOD: Movido el código dentro de la etiqueta GeSHi
4  Programación / Programación C/C++ / templates : T y T* en: 5 Octubre 2021, 05:24 am
Buenas señores..

Tengo una duda a medias... creo entender como va esto de las plantillas pero quisiera estar seguro.

Del siguiente codigo:
Código
  1. template <typename T>
  2. void my_function ( T _param);


Entiendo que para este caso, T es un tipo generico que acepta cualquier clase de argumento (puntero, referencia o valor)
Como quien dice, no tiene formato, puede ser constante, estatico, etc...

Código
  1. int x = 19;
  2. my_function ( x );  //en la plantilla, T se transformaria en int    ....     int _param = 19;
  3.  
  4. int * px = &x;
  5. my_function ( px );  //en la plantilla, T se transformaria en int *    ....      int * _param = &x;

Como T es virgen (por decirlo de alguna forma), no esta pre-formateada, simplemente es una T sola, puede aceptar cualquier tipo de clase y con cualquier tipo de atributo... es asi?



Pero en este siguiente caso:
Código
  1. template <typename T>
  2. void my_function ( T* _param);


Aqui T es puntero, entiendo que solo acepta una direccion de memoria u otro puntero, pero no un elemento por valor, ya que T* ha sido pre-formateado para funcionar solo como puntero.

Código
  1. int x = 19;
  2. my_function ( x );  //esto produce un error porque x es un tipo, no un puntero....
  3.  
  4. int * px = &x;
  5. my_function ( px );   //esto estaria bien, ya que seria una asignacion de puntero....


Segun entiendo, en el fondo la asignacion a un tipo plantilla es como si se comportara como override de funcion:


T = Acepta cualquier cosa por valor
T& = Acepta cualquier cosa solo que como referencia
T* = Preformateada para aceptar solo punteros o direcciones de memoria o referencias a punteros
const T = Preformateada para aceptar cualquier cosa por valor pero se transforma obligatoriamente en constante
const T& = Preformateada para aceptar cualquier cosa por referencia pero se transforma en constante
const T* = Preformateada para aceptar solo punteros o direcciones de memoria y lo transforma a constante.


En el siguiente ejemplo:
Código
  1. template <typename T>
  2. void my_function ( const T* _param);
  3.  
  4. const float * pfloat = new float(12.5f);
  5. my_function ( pfloat );   //esto se asignara bien.
  6.  
  7. float * pfloat2 = new  float (6.9f);
  8. my_function ( pfloat2 );   //esto tendria el mismo efecto que pfloat ya que en la plantilla siempre quedara como const.
  9.  
  10.  


Es mas o menos como lo creo?

Saludos
5  Programación / Programación C/C++ / extension .inl y .hpp en: 16 Septiembre 2021, 03:42 am
Buenas estimados.

Estoy estudiando un libro de SFML, y en una de sus paginas al usar plantillas para cargar recursos menciona que cuando se trabaja con plantilla de clases es bueno renombrar la cabecera a .hpp y las definiciones de los metodos en .inl .. incluyendo dicho .inl al final del .hpp

El libro no explica claramente el por qué.
Se debe esto a alguna convencion o tiene un significado objetivo?


saludos y gracias.
6  Programación / Programación General / Paradigma de programacion para este caso... en: 8 Julio 2021, 07:12 am
Hola amigos...

Estoy desarrollando un programa, y se esta volviendo un poco spaghetti, es un sistema de e-learning:

Tengo el siguiente escenario (para resumirlo):

Código:
class A{

     B objetoB;
     std::vector<C> objetosC;
    
};

class B{

     X objetoX;
     std::vector<Y> objetosY;
 

};

class  C { ...}
class X {...}

class Y {
 
     std::string palabra = "Hola";
}


//singleton.h
std::vector<A> todos_los_objetos_A;
std::vector<B> todos_los_objetos_B;




En mi caso son mas clases pero expuse esto para aislar mi duda...
encontrar un subobjeto Y y acceder a la variable "palabra" desde fuera se esta volviendo tremendamente tedioso... .. tan solo para modificar la palabra "Hola" a "Hello" (por ejemplo).. debo escribir lo siguiente:

Código:
singleton s;
s.todos_los_objetosA[0].objetoB.objetosY[2].palabra = "Hello";

Imaginar que el vector tiene 20 elementos al menos y que el total de clases son 10... y por si fuera poco, cada indice de vector debo calcularlo previamente tambien, luego una vez encontrado, debo excavar demasiado para modificar el bisnieto de una clase...  no se si hay alguna solucion para evitar esto, ya que es propenso a confusión y errores....  estuve pensando en deshacer las composiciones y dejar todos los vectores en singleton.h

Código:
//singleton.h
std::vector<A> todos_los_objetos_A;
std::vector<B> todos_los_objetos_B;
std::vector<C> todos_los_objetos_C;
std::vector<Y> todos_los_objetos_Y;

.. y acceder a los objetos de los subindices directamente en la raiz de la clase singleton...  esto rompe un poco el paradigma orientado a objetos pero me da la impresion de que es menos confusion...


Que harian en mi caso?  estoy usando base de datos.


Saludos.





7  Comunicaciones / Redes / Balnceadores de carga en: 9 Abril 2021, 16:22 pm
Buenas..

Tengo una red de mas de 30 computadores y 3 proveedores de internet, un proveedor entrega 500mpbs, otro 200  y un tercero 60..

Mi intencion es que el balanceador utilice solamente la primera red (500) para que los equipos puedan navegar mas rapido, en caso de que ese proveedor se caiga o tenga problemas, solo ahi pasar al siguiente (200) y asi con el siguiente...

Es posible configurar un balanceador de esa forma?
O quiza haya alguna forma de distribuir los 3 proveedores paralelalmente por toda la red?.

O como recomiendan ustedes para este caso ?

saludos y gracias
8  Programación / Programación C/C++ / puntero a clase con propiedades alojadas en la pila en: 4 Marzo 2021, 02:22 am
Hola.. espero que se encuentren bien.

Me ha asaltado una duda con las clases, sus miembros y punteros...  Suponiendo el siguiente ejemplo:

Código:
class Alpha{
private:
     ObjetoA  objA;
     ObjetoB  objB;
};


void main(){
     Alpha* a = new Alpha;
}

Desde main, un objeto de tipo Alpha se está almacenando en la memoria dinamica....
Pero el objeto Alpha tiene otros dos objetos que no son punteros, tambien se estan almacenando en la memoria dinamica?.... o estos dos se separan (fisicamente) de la clase y se almacenan en la pila?..

Saludos..
9  Programación / Programación C/C++ / herencia : funcion virtual no se ejecuta.. en: 15 Noviembre 2020, 02:03 am
Hola amigos..
Que pasa en este codigo que la funcion virtual do_xy() en x no se está ejecutando?

Código
  1. #include <iostream>
  2.  
  3. struct x{  
  4.  x(){}
  5.  ~x(){}
  6.  
  7. protected:
  8.  virtual void do_xy(){
  9.      cout << "from x " << endl;     //esto no se ejecuta
  10.  }  
  11. };
  12.  
  13. struct y : public x{
  14.  y(){}
  15.  ~y(){}
  16.  
  17. public:
  18.  void do_xy() override{
  19.      cout << "from y " << endl;     //esto se ejecuta
  20.  }    
  21. };
  22.  
  23. int main(){
  24.    y _y;
  25.    _y.do_xy();
  26.  
  27.    cin.get();
  28.    return 0;
  29. }
  30.  

Saludos.. gracias.
10  Programación / Programación C/C++ / Valores hexadecimales en código en: 5 Noviembre 2020, 14:11 pm
Buenas a todos...

Revisando el código de un driver me di cuenta que se hace uso de valores hexadecimales, cual es su utilidad/ventaja ?

Código:

const uint8_t value0 = 22c;

Saludos
Páginas: [1] 2 3 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines