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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: 1 2 [3] 4 5 6 7
21  Programación / Bases de Datos / Base de datos para informacion masiva? en: 31 Enero 2020, 03:20 am
Hola amigos..

Tengo que diseñar un programa que será un cliente hecho en Qt C++, se debe conectar a una base de datos alojada en un servidor.

La situacion es que son 13 regiones, cada region tiene 15 modulos, y cada modulo utiliza 7 tablas independientes, entonces como verana son muchas muchas tablas (ese es mi concepto, posiblemente este equivocado), cada modulo ingresa informacion separada del resto, por eso pienso que son cientos de tablas...

Que se hace en este caso?

1) Crear una sola base de datos gigante que tenga 1365 tablas (13 x 15 x 7) y distinguirlas con un prefijo, ejemplo:  table_region0_modulo0_usuarios, table_region0_modulo0_direcciones, etc

2) Crear 13 bases de datos y 105 tablas por cada db..

3) Otra ...

All final, la idea es que cada modulo ejecute su cliente del programa, y se conecte al indice de su propio modulo y lea la informacion segun ese sufijo...


Como les he comentado, los registros de usuarios del modulo 0 no son los mismos que los del modulo 1.. por eso pense en crear muchas tablas..

Que hacer en este caso?
saludos y gracias.
22  Programación / Programación C/C++ / Cual es el sentido de las funciones virtuales puras? en: 5 Octubre 2019, 17:59 pm
Hola!

Hago esta pregunta desde la ignorancia, entiendo que virtual/override ayuda mucho a no tener que redefinir trozos de codigo de una función, sin embargo no entiendo cual es el fin de las funciones virtuales puras, es decir, no implementan nada, solo veo que ocupan un espacio en el archivo de cabecera, al fin y al cabo de todas formas tendrás que volver a declararlas y definirlas en las subclases como override...

Código:

class A{
protected:
     virtual void hacer_algo() = 0;     //Esto me parece que estuviera de más.....
     //otras cosas..

};

Código:
class B : public A{
protected:
     void hacer_algo() override;   //.... si aqui tengo que estar escribiendolo nuevamente.

};

Por qué no directamente?:

Código:
class A{
protected:
     //otras cosas
};

Código:
class B : public A{
protected:
     void hacer_algo();
};
23  Programación / Programación C/C++ / enums heredados ? en: 5 Octubre 2019, 04:44 am
Buenas noches:

De la misma forma que se puede virtualizar una función y sobreemontarla en alguna clase hija... me pregunto si es posible hacer lo mismo con los enums....

por ejemplo:

Código:
class padre{

protected:
     virtual enum mis_objetos{    //virtual aqui?
          objPrincipal = 99
     };

     virtual void una_funcion(mis_objetos mo){
          //hacer algunas cosas previas que sirven para todas las subclases//
     }

}

Código:
class hija1 : public padre{

protected:
     enum mis_objetos override{
          obj0 = 0,
          obj1
     };

     void una_funcion(ms_objetos mo) override;
}


Código:
class hija2 : public padre{

protected:
     enum mis_objetos override{
          obj50 = 3,
          obj55
     };

     void una_funcion(ms_objetos mo) override;
}

Como verán, cada clase tiene sus propios elementos enum, sin embargo, para que la función una_funcion(mis_objetos) pueda sobremontarse, es necesario que el enum exista en el padre..

Es posible hacer esto? (con el codigo estoy especulando, lo mas seguro que tenga errores)

Gracias.
24  Programación / Programación C/C++ / Variables estaticas... en: 29 Agosto 2019, 05:16 am
Muy buenas..

Tengo un mal concepto quizá de lo que son las variables estáticas, yo las imagino algo asi como un contenedor que se crea automáticamente al iniciarse un programa, vive durante todo el programa y luego se cierra una vez que el programa termina... como un bolso de viaje que tomas al iniciar el viaje y te deshaces de él cuando regresas a casa... asi es como yo las veo.. (por favor, indicarme si estoy mal).

El siguiente código no esta reflejando esto:

main.cpp
Código
  1. #include <iostream>
  2. #include "Archivo2.h"
  3. #include "Archivo1.h"
  4.  
  5. int main() {
  6. x::num = 10;
  7. std::cout << "Desde main -> " << x::num << "Memoria : " << &x::num;
  8. std::cout << std::endl;
  9. Archivo1 a;
  10. a.printVal();
  11. return 0;
  12. }
  13.  


Archivo1.h
Código
  1. #pragma once
  2. struct Archivo1{
  3. void printVal() const;
  4. };
  5.  

Archivo1.cpp
Código
  1. #include "Archivo2.h"
  2. #include "Archivo1.h"
  3. #include <iostream>
  4.  
  5. void Archivo1::printVal() const {
  6. std::cout << "Desde Archivo1 -> " << x::num << "Memoria : " << &x::num;
  7.  
  8. }
  9.  

Archivo2.h
Código
  1. namespace x{
  2.     static int num;
  3. }
  4.  


La salida de consola "Desde Main ->" imprime 10
La salida de consola "Desde Archivo1 ->" imprime 0...

Creí que estaba imprimiendo el mismo elemento, pero no, cuando le agregue que imprimiera la dirección de memoria, me encontré con la sorpresa de que ambas estan imprimiendo direcciones diferentes....

En qué momento se creó una nueva instancia de la variable estática y como puedo solucionar este dilema?.. mi intención es escribir e imprimir en una sola variable x::num

Saludos_!

25  Programación / Programación C/C++ / Uso de Threads y error de compilación asignado a una libreria estandar... en: 4 Agosto 2019, 00:58 am
Buenas..

Tengo este código y me está saliendo error, ppienso que la sintaxis está correcta.. aun no entiendo por qué el error..  Alguna pista?


Ver en el siguiente enlace el codigo para probar:
https://onlinegdb.com/ryO2ptQ7B

Saludos.


Edit : Le quite el simbolo de referencia en el parámetro para la funcion de la linea 5 y ahí compiló..
Pero no veo por qué...
26  Programación / Programación C/C++ / iteratores de flujo....inicializacion de vector, etc. en: 28 Julio 2019, 23:57 pm
Hola amigos.. que tal.

Tengo una gran duda, la verdad me confunde un poco el hecho de que se pueda inicializar una variable de 3 formas:

Código
  1. int x = 3;
  2. int y {4};
  3. int z(5);
  4.  

Las 3 son válidas, bueno, así como se ve, no está complejo realmente, el problema es cuando usas elementos como un contenedor.. ya que los contenedores aceptan una lista de argumentos encerradas en llave, sin embargo esto me confunde un poco, porque no se cuando está inicializando o cuando está pasando por argumento a un constructor.. o cuando está usando un constructor de conversión.. etc..


Ejemplo:
Código
  1.  
  2. vector<string> vs { "Hola", " Que tal"};     //No hay problema..
  3. vector<string> vs2 { 5, 1 };                     //Houston
  4.  
  5. istream_iterator<string> is;
  6. istream_iterator<string> is2;
  7.  
  8. vector<string> vs3{is, is2};                     //No hay problema.. por que?
  9.  
  10.  


Sospecho que en vs3 no estoy inicializando … pensé que las llaves eran para eso... que esta pasando en esta línea?..


Saludos y gracias.


--------------------------------

Edito:

Estuve viendo los constructores que tiene std::vector y encontre uno que acepta un iterator de inicio y otro de fin... entonces eso es lo que debe estar aceptando, es decir,  vs3 no esta inicializando, solo le estoy pasando los iteradores que están conectados al flujo de entrada ifstream....  En el fondo lo que me habia confundido es el uso de las llaves, tenia entendido que las llaves servian para inicializar en los contenedores, pero ya vi que hace lo mismo que los parentesis, a menos que este poblando al contenedor, ahi seria una inicialización...

Saludos.
27  Programación / Programación C/C++ / Error C2662 - const en: 7 Julio 2019, 18:15 pm
Hola amigos..

En el siguiente código, si yo quito la palabra const (línea 52) derivada de un template tipo C, el programa corre....


Link -> https://onlinegdb.com/SyW1F9kWS
Hagan clic en Fork para probar el código.

Estuve buscando por què pasa esto, segun el compilador no pudo realizar una conversion de un tipo que no es const a uno que es const...  entiendo que quitando la palabra const se acaba el problema, pero por que?.. y si no deseo retirar la palabra const donde mas debería agregarla para que pueda compilar?... (Pasa que el libro que estudio aparece con const, ero no veo diferencia realmente con lo que tengo).

Gracias.



Bueno, según un usuario de discord, me dijo que las funciones begin() y end() deben ser const también, y efectivamente colocándolas asi compiló correctamente.

Pero es curioso porque en el libro que estudio, dichas funciones no son const..

Ahora mismo estoy investigando por que´.



Si yo coloco las funciones begin() y end() como funciones no miembro, es decir, fuera de la clase o estructura, el compilador no las detecta...

Lnik -> https://onlinegdb.com/SJgL5ayZH


Debe forzosamente ser funciones miembro?

EI: NO HAGAS DOBLE POST NUEVAMENTE, SERA BORRADO.
28  Programación / Programación C/C++ / asignacion de array dinamico usando una variable no inicializada.. en: 6 Julio 2019, 19:35 pm
Hola amigos. que tal.

Tengo el siguiente caso:
Código
  1.  
  2. #include <iostream>
  3. #include <initializer_list>
  4.  
  5. struct x {
  6. private:
  7.     int * iArray = nullptr;
  8.     int tam;       //Sin inicializar
  9.  
  10. public:
  11.     x(std::initializer_list<int> lst) : iArray{new int[lst.size()}, tam{lst.size()}{
  12.          std::copy(lst.begin(), lst.end(), iArray);
  13.     }
  14.  
  15.     //Constructor de copia
  16.     x(const x & otherX);
  17.  
  18. };
  19.  
  20. //Definición de constructor de copia (notar aquí que al momento de hacer
  21. //la primera inicialización tam no ha recibido valor.
  22. x::x(const x & otherX) : iArray{new int[tam]}, tam{otherX.tam}{
  23.     for (int y = 0; y < tam; ++y){
  24.          iArray[y] = otherX.iArray[y];
  25.     }
  26. }
  27.  
  28. int main (){
  29.     x x0 {2, 4, 6};
  30.     x x1 = x0;   //copia correcta...
  31.  
  32.     //prueba directa de asignacion de una variable no definida a un array dinamico:
  33.  
  34.     int x;
  35.     int * arr = new int[x];     //error, x no está definida.
  36. }
  37.  

Como se puede observar, en la linea 22 se está inicializando el array dinamico con un tamaño de tam antes que inicializar al mismo tam, o sea, se esta inicializando con un valor desconocido...  sin embargo, esta funcionando bien, ahora bien, en la linea 35, se esta intentando crear un array dinamico con un tamaño x, pero no sirvio.... acaso la inicialización funciona distinto a la asignacion?

Gracias, saludos.

29  Programación / Programación C/C++ / Asignaciones e inicializacion de constructores.. en: 22 Junio 2019, 22:05 pm
Buenas..

Me ha causado extrañeza la forma en que se puede inicializar un tipo a traves de un argumento al constructor:

Código
  1. struct s {
  2. private:
  3. int x = 0;
  4. public:
  5. s(int _x) : x{ _x } {}
  6. void p() const { std::cout << x; }
  7. int getx() const { return x; }
  8. };
  9.  
  10. int main() {
  11. s _s(5);                                       //forma argumento a constructor 1
  12. s _t = 6;                                     //forma argumento a constructor 2
  13. s _u{ 7 };                                   //forma argumento a constructor 3
  14. s _v = { 8 };                              //forma argumento a constructor 4
  15.  
  16. std::cout << std::endl;
  17. std::cout << _s.getx() << std::endl; //salida : 5
  18. std::cout << _t.getx() << std::endl; //salida : 6
  19. std::cout << _u.getx() << std::endl; //salida : 7
  20. std::cout << _v.getx() << std::endl; //salida : 8
  21. return 0;
  22. }
  23.  

Siempre he inicializado un tipo (que reciba un argumento de constructor) con los parentesis, es decir, tal como sale en la salida 5, es decir:
Código
  1. s _s(5);
  2.  


Sin embargo, estaba convencido que la siguiente linea solo tenia como fin la asignacion de un valor:
Código
  1. s _t = 6;
  2.  

Me ha parecido curioso porque se supone que una asignacion por regla general debe tener el mismo tipo que el asignado... sin embargo, el tipo s no es un entero.


Entonces me pregunto si esa linea realmente es una asignacion o lleva otro nombre....



30  Programación / Programación C/C++ / Sobrecarga operador+ y miembro puntero... en: 18 Junio 2019, 22:11 pm
Hola nuevamente:

El siguiente código:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct s{
  6.  
  7. private:
  8.    double * d = nullptr;      
  9.  
  10. public:
  11.    s() : d{new double}{}
  12.    ~s(){ if (d != nullptr) delete d; }
  13.    void setd(const double _d){ *this->d = _d; }
  14.    double getd() const { return *this->d; }
  15.  
  16. };
  17.  
  18. s operator+(const s & _s0, const s & _s1){
  19.    s ns;
  20.    ns.setd(_s0.getd() + _s1.getd());
  21.    return ns;
  22. }
  23.  
  24. int main(){
  25.  
  26.    s s0;
  27.    s s1;
  28.  
  29.    s s2;
  30.    s2 = s0 + s1;
  31.  
  32.    return 0;
  33. }
  34.  
  35.  

Aqui listo para ejecutar:
https://onlinegdb.com/rJNPQ68kr

Al ejecutar, obtengo el mensaje de error:

*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000795c80 ***                                             
Aborted (core dumped)


Estoy seguro que el problema esta entre el puntero privado y el delete en el destructor, ya que si no uso puntero, compila bien.

Sin embargo, he puesto puntero porque quiero entender qué está pasando.  Me da la impresión de que en la definición del operador+ como se crea el objeto ns al terminar el ámbito, se está destruyendo y esta eliminando el puntero.  Lo cual parece valido, pero no tendría por qué corromper la ejecución, se supone que estoy destruyendo un objeto de copia, no los operandos utilizados.

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