Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: digimikeh en 22 Febrero 2019, 02:22 am



Título: Puntero e indice 0 de ese puntero...
Publicado por: digimikeh en 22 Febrero 2019, 02:22 am
Hola!

Estoy intentando crear una agenda y me he topado con algo que me parecio extraño:

Código
  1. //Persona.h
  2. class Persona{
  3.  
  4.       int edad;
  5.  
  6. public:
  7.       Persona() : edad(60){};
  8.       int LeerEdad() const {
  9.              return this->edad;
  10.       }
  11.  
  12. };
  13.  

Código
  1. //main.cpp
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. Persona * personas;
  6.  
  7. int main (){
  8.  
  9.       personas = new Persona;
  10.  
  11.       std::cout << personas->LeerEdad() << std::endl   //Esto imprime 60
  12.  
  13.       std::cout << personas[0].LeerEdad() << std::endl //Esto imprime 223525
  14.  
  15.       return 0;
  16.  
  17. }
  18.  

Me parecía haber leido en alguna parte que personas y personas[0] apuntaban al mismo segmento de memoria..... pero están imprimiendo dos valores diferentes... No son lo mismo?  El uso que quiero darle a "personas" es el de un arreglo.


Saludos y gracias.


Título: Re: Puntero e indice 0 de ese puntero...
Publicado por: srWhiteSkull en 22 Febrero 2019, 02:59 am
En teoría son lo mismo.

Yo por si acaso lo he compilado usando el VS y me da en ambos casos 60 y 60.

(https://drive.google.com/uc?export=view&id=1xAg5uTqAsKqAhQCz-srQYZEvKKnvr34M)


Título: Re: Puntero e indice 0 de ese puntero...
Publicado por: digimikeh en 22 Febrero 2019, 13:31 pm
de verdad?, que extraño, entonces tengo que ver el resto del codigo :silbar:


Título: Re: Puntero e indice 0 de ese puntero...
Publicado por: EdePC en 23 Febrero 2019, 02:30 am
Saludos,

- Recién voy tocando Clases en C++, un poco lioso porque hay varias maneras de estructurarlas ...

Código
  1. //Persona.h
  2. class Persona {
  3.  
  4.  int edad;
  5.  
  6.  public:
  7.  Persona() : edad(60) {};
  8.  int LeerEdad() const {
  9.    return this->edad;
  10.  }
  11.  
  12. };

Código
  1. //main.cpp
  2. #include <iostream>
  3. #include "Persona.h"
  4.  
  5. Persona * personas;
  6.  
  7. int main () {
  8.  
  9.  personas = new Persona;
  10.  
  11.  std::cout << personas->LeerEdad() << std::endl;   //Esto imprime 60
  12.  std::cout << personas[0].LeerEdad() << std::endl; //Esto imprime 60
  13.  //std::cout << personas.LeerEdad() << std::endl; //Esto da error
  14.  std::cout << (*personas).LeerEdad() << std::endl; //Esto imprime 60
  15.  
  16.  
  17.  /* Metodo clasico */
  18.  Persona personita;
  19.  
  20.  //std::cout << personita->LeerEdad() << std::endl;   //Esto da error
  21.  //std::cout << personita[0].LeerEdad() << std::endl; //Esto da error
  22.  std::cout << personita.LeerEdad() << std::endl; //Esto imprime 60
  23.  //std::cout << (*personita).LeerEdad() << std::endl; //Esto da error
  24.  
  25.  return 0;
  26. }

Código:
C:\Users\EdSon\Desktop>g++ main.cpp -o main.exe && main.exe
60
60
60
60

C:\Users\EdSon\Desktop>

Referencias:
https://openlibra.com/es/book/fundamentos-de-programacion-con-el-lenguaje-de-programacion-c-ed-2017 (Pág. 131 Tipos abstractos de datos, Clases)
https://openlibra.com/es/book/programacion-orientada-a-objetos-2 (Pág. 17 Clases y Objetos)
https://goalkicker.com/CPlusPlusBook/CPlusPlusNotesForProfessionals.pdf (Pág 195 Accessing Class members)


Título: Re: Puntero e indice 0 de ese puntero...
Publicado por: digimikeh en 23 Febrero 2019, 13:11 pm
Efectivamente, me di cuenta que funciona, debe haber algo más en el código que impide que funcione bien.. >:D