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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20
71  Programación / Programación C/C++ / Re: Asignaciones e inicializacion de constructores.. en: 23 Junio 2019, 06:00 am
Entiendo, ya me va quedando todo mas claro... gracias por las respuestas..

Vaya Stroustup, que le gusta complicar las cosas, pero supongo que es para mejor...
72  Programación / Programación C/C++ / Re: Asignaciones e inicializacion de constructores.. en: 22 Junio 2019, 23:15 pm
Hola, tendre en cuenta esa convención de las variables, gracias.
puede ser de la siguiente forma?:

Código
  1. int un_numero = 6;
  2.  

o es mejor asi? :

Código
  1. int unNumero = 6;
  2.  


Respecto a la autoasignacion del operador =, C++ lo hara para todos los tipos creados por el usuario que no haya recargado el operador = ? o tiene distinciones ?..

Saludos y gracias.

73  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....



74  Programación / Programación C/C++ / Re: Sobrecarga operador+ y miembro puntero... en: 19 Junio 2019, 05:22 am
@#Loretz.. efectivamente, olvide darle un valor por default en el constructor.
Respecto al puntero this, pues si, es que el código es borrador, lo hago nada mas que para fines de practica... en un reléase, el this lo utilizo siempre y cuanod tenga dos o mas variables que tengan el mismo nombre..

Aproposito, muchas gracias por compartir lo de la regla de 3...
creo que defintivamente tengo que echarle una repasadita al constructor de copia ademas..


#@String Manolo, pues si, solo que como el puntero d es privado, estoy accediendo con el getter..

75  Programación / Programación C/C++ / Re: Sobrecarga operador+ y miembro puntero... en: 19 Junio 2019, 00:48 am
Tienes razón!... me había preocupado de sobrecargar el operador + y no pensé en las consecuencias, debí haber cargado ademas el operador = y después << para imprimirlo...

La lección que me dio esto es que debo pensar en cada sobrecarga de operador necesaria pues una lleva a la otra...

Gracias
76  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.

77  Programación / Programación C/C++ / Re: Sobrecarga de operador y constructores/destructores en: 18 Junio 2019, 15:35 pm
Mirate el link que te pasé que ahí te viene.

Si, gracias, Lo veo.
78  Programación / Programación C/C++ / Re: Sobrecarga de operador y constructores/destructores en: 17 Junio 2019, 19:42 pm
Vaya si, me he equivocado al replantear el ejemplo, debi reemplazar x por typeX al final en el cout...


Bueno, comentar que he pasado el argumento por referencia y ahí no me ejecutó el constructor....  lo cual ahora que lo veo bien si es lógico..

de repente es algo confuso saber cuando retornar una referencia o una copia y cuando aceptar un argumento como referencia o como copia en los operadores sobrecargados...

gracias por la ayuda..
79  Programación / Programación C/C++ / Sobrecarga de operador y constructores/destructores en: 17 Junio 2019, 04:54 am
Hola..

haciendo algunos ensayos, me he encontrado con una sorpresa, cuando intento utilizar algún operador sobrecargado con un tipo propio, se ejecuta el constructor y el destructor al instante.... ej:

Código
  1.  
  2. struct x{
  3.  
  4. private:
  5.     int a;
  6.  
  7. public:
  8.     x(){ std::cout << "Constructor ejecutado."; }
  9.     ~x() { std::cout << "Deconstructor ejecutado."; }
  10.     inline void setA(const int _a){ this->a = _a; }
  11.     inline int getA() const { return this->a; }
  12. }
  13.  
  14. std::ostream operator <<(std::ostream & _os, const x _x){
  15.     _os << _x.getA();
  16.     return _os;
  17. }
  18.  
  19.  
  20.  
  21. int main(){
  22.  
  23.     x typeX;    //Constructor llamado como es usual..
  24.     std::cout << x;     //Constructor y deconstructor llamados, por que?
  25.  
  26. }
  27.  
  28.  
  29.  
80  Programación / Programación C/C++ / Re: El mecanismo de static_assert(); en: 16 Junio 2019, 04:58 am
entiendo, entonces es del IDE, no del compilador...
podria salvar varios minutos de compilacion...

llego un momento en que me pregunte : para que rayos tengo que darle un segundo argumento con el error si ya de antemano me lo esta señalando...

gracias por las respuestas.
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines