Puntero e indice 0 de ese puntero...

Iniciado por digimikeh, 22 Febrero 2019, 02:22 AM

0 Miembros y 1 Visitante están viendo este tema.

digimikeh

Hola!

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

Código (cpp) [Seleccionar]

//Persona.h
class Persona{

       int edad;

public:
       Persona() : edad(60){};
       int LeerEdad() const {
              return this->edad;
       }

};


Código (cpp) [Seleccionar]

//main.cpp
#include <iostream>
#include "Persona.h"

Persona * personas;

int main (){
       
       personas = new Persona;

       std::cout << personas->LeerEdad() << std::endl   //Esto imprime 60

       std::cout << personas[0].LeerEdad() << std::endl //Esto imprime 223525

       return 0;

}


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.
Dungeons & dragons;
dragons.Attack();

srWhiteSkull

#1
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.


digimikeh

de verdad?, que extraño, entonces tengo que ver el resto del codigo :silbar:
Dungeons & dragons;
dragons.Attack();

EdePC

Saludos,

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

Código (cpp) [Seleccionar]
//Persona.h
class Persona {

  int edad;

  public:
  Persona() : edad(60) {};
  int LeerEdad() const {
    return this->edad;
  }

};


Código (cpp) [Seleccionar]
//main.cpp
#include <iostream>
#include "Persona.h"

Persona * personas;

int main () {

  personas = new Persona;

  std::cout << personas->LeerEdad() << std::endl;   //Esto imprime 60
  std::cout << personas[0].LeerEdad() << std::endl; //Esto imprime 60
  //std::cout << personas.LeerEdad() << std::endl; //Esto da error
  std::cout << (*personas).LeerEdad() << std::endl; //Esto imprime 60


  /* Metodo clasico */
  Persona personita;

  //std::cout << personita->LeerEdad() << std::endl;   //Esto da error
  //std::cout << personita[0].LeerEdad() << std::endl; //Esto da error
  std::cout << personita.LeerEdad() << std::endl; //Esto imprime 60
  //std::cout << (*personita).LeerEdad() << std::endl; //Esto da error

  return 0;
}


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)

digimikeh

Efectivamente, me di cuenta que funciona, debe haber algo más en el código que impide que funcione bien.. >:D
Dungeons & dragons;
dragons.Attack();