Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Clases con datos miembro que son clases?

Estas en el tema de ¿Clases con datos miembro que son clases? en el foro de C/C++ en Foros del Web. Buenas, Tengo este codigo de ejemplo de un tutorial que descarge: Código: // Empezar rectangulo.hpp #include <iostream> struct Punto // contiene las coordenadas x,y { ...
  #1 (permalink)  
Antiguo 04/09/2007, 20:30
Avatar de limboings  
Fecha de Ingreso: enero-2005
Mensajes: 794
Antigüedad: 19 años, 9 meses
Puntos: 2
¿Clases con datos miembro que son clases?

Buenas,

Tengo este codigo de ejemplo de un tutorial que descarge:

Código:
// Empezar rectangulo.hpp
#include <iostream>
struct Punto     // contiene las coordenadas x,y
	{
	  // No tiene constructor, usa defecto
	public:
       void ConfigurarX(int x) { suX = x; }
       void ConfigurarY(int y) { suY = y; }
       int ObtenerX()const { return suX;}
       int ObtenerY()const { return suY;}
    private:
      int suX;
      int suY;
     
	};         // finalización de la declaración de clase Punto

struct Rectangulo
  {
	public:
      Rectangulo (int superior, int izquierdo, int inferior, int derecho);
      ~Rectangulo () {}

	  Punto  ObtenerSuperiorIzquierdo() const { return suSuperiorIzquierdo; }
      Punto  ObtenerInferiorIzquierdo() const { return suInferiorIzquierdo; }
      Punto  ObtenerSuperiorDerecho() const { return suSuperiorDerecho; }
      Punto  ObtenerInferiorDerecho() const { return suInferiorDerecho; }

    private:
      Punto  suSuperiorIzquierdo;
      Punto  suSuperiorDerecho;
      Punto  suInferiorIzquierdo;
      Punto  suInferiorDerecho;

  };
  // fin rectangulo.hpp
Lo he acortado porque sino hubiese ocupado bastante espacio y no seria muy legible que digamos..

Las partes donde el tipo de retorno es Punto no las entiendo.. no pretendo que me lo expliqueis (realmente si,pero no puedo obligaros jaja ) pero si por lo menos que me dieseis alguna fuente donde encontrar informacion..estube buscando por google y no encontre nada sobre esto, me he pasado por las webs de tutoriales que dais en las faq's de este foro y tampoco he visto nada.. estoy un poco aburrido,por eso os pido haber si podeis ayudarme..

Un saludo y gracias..!
__________________
La chapucería de la esquina
  #2 (permalink)  
Antiguo 12/09/2007, 14:40
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Re: ¿Clases con datos miembro que son clases?

Aqui hay dos estructuras u "clases" declaradas, una llamada Punto y otra llamada Rectangulo, lo que hace cuando dice Punto en la estructura Rectangulo es regresar un tipo de dato Punto. No se si me explique bien.

Declaras un tipo de dato Punto. Construyes un "Objeto" de ese tipo de dato para poder usarlo en Rectangulo. Y lo que hace Punto ObtenerInferiorIzquierdo() const { return suInferiorIzquierdo; } es retornar un tipo de dato Punto, en este caso retorna la coordenada x y de la esquina Inferior Izquierda. Te recomiendo que leas sobre Programación Orientada a Objetos para que entiendas mejor
  #3 (permalink)  
Antiguo 13/09/2007, 03:16
Avatar de limboings  
Fecha de Ingreso: enero-2005
Mensajes: 794
Antigüedad: 19 años, 9 meses
Puntos: 2
Re: ¿Clases con datos miembro que son clases?

Buenas,

Ya he leido, y no solo de una fuente,sino de varias y no hay forma de entender como en la definicion del constructor se utiliza estas declaraciones:
Código:
      suSuperior = superior;
      suIzquierdo = izquierdo;
 
     suSuperiorIzquierdo.ConfigurarX(izquierdo);
     suSuperiorIzquierdo.ConfigurarY(superior);
Como es posible que suSuperiorIzquierdo que es un dato miembro acceda apartir del operador "." a un metodo? y como es posible que suSuperiorIzquierdo pueda contener dos valores?Porque posteriormente se puede llamar a suSuperiorIzquierdo X o a suSuperiorIzquierdo Y y se devuelven distintos valores..

Espero haberme explicado..

Un saludo y gracias por la respuesta..
__________________
La chapucería de la esquina
  #4 (permalink)  
Antiguo 13/09/2007, 07:46
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 5 meses
Puntos: 28
Re: ¿Clases con datos miembro que son clases?

No se si entendí muy bien lo que preguntas, pero te explico (o al menos lo intentaré):

suSuperiorIzquierdo es una estructura del tipo Punto, Punto tiene 2 mienbros (suX y suY) que se llaman propiedades, pero también tiene otros 4 miembros que se llaman métodos. Cuando se creó el C++ las estructuras pasaron a ser clases, así que para este caso estaríamos hablando de clases.

Para acceder a cualquier mienbro (propiedad o método) de una clase (que no sea un puntero) se accede usando el operador "." (punto). Por eso es que debes hacer:
Código:
suSuperiorIzquierdo.ConfigurarX(izquierdo);
porque de otra forma ¿cómo sabrías que estas accediendo al ConfigurarX de suSuperiorIzquierdo y no al de suSuperiorDerecho?
Entonces la sintaxis general sería algo como:
Código:
Objeto.Miembro
en caso de ser una propiedad, si es un método:
Código:
Objeto.Metodo(//parámetros);
si la propiedad de la que estamos hablando es otro objeto sería algo como:
Código:
Objeto.Miembro.Propiedad
Objeto.Miembro.Metodo(//parámetros);
Espero te sea de ayuda...saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 18/09/2007, 03:37
Avatar de limboings  
Fecha de Ingreso: enero-2005
Mensajes: 794
Antigüedad: 19 años, 9 meses
Puntos: 2
Re: ¿Clases con datos miembro que son clases?

Buenas,

Cita:
Iniciado por _Lucifer_ Ver Mensaje
Cuando se creó el C++ las estructuras pasaron a ser clases, así que para este caso estaríamos hablando de clases.
Las estructuras no son las que que utilizan la palabra clave STRUCT?Es decir, que aun se pueden seguir utilizando no?Aunque seguramente sea mucho mejor utilizar clases..cierto?

Cita:
Iniciado por _Lucifer_ Ver Mensaje
porque de otra forma ¿cómo sabrías que estas accediendo al ConfigurarX de suSuperiorIzquierdo y no al de suSuperiorDerecho?
Hay tengo el problema yo, suSuperiorIzquierdo y suSuperiorDerecho pueden contener dos valores?Porque le estamos indicando un suX y un suY para cada uno..

Un saludo y gracias!!
__________________
La chapucería de la esquina
  #6 (permalink)  
Antiguo 18/09/2007, 14:33
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años, 5 meses
Puntos: 28
Re: ¿Clases con datos miembro que son clases?

Cita:
Iniciado por limboings Ver Mensaje
Buenas,


Las estructuras no son las que que utilizan la palabra clave STRUCT?Es decir, que aun se pueden seguir utilizando no?
...
Si a las dos preguntas.

Cita:
Iniciado por limboings Ver Mensaje
...
Aunque seguramente sea mucho mejor utilizar clases..cierto?
...
Yo prefiero usar class si voy a trabajar con clases.

Cita:
Iniciado por limboings Ver Mensaje
...
Hay tengo el problema yo, suSuperiorIzquierdo y suSuperiorDerecho pueden contener dos valores?
...
Si, tantos como quieras...solo esc cuestión de definirlos.
Cita:
Iniciado por limboings Ver Mensaje
...
Porque le estamos indicando un suX y un suY para cada uno..
...
Exacto...si poner más variables en la declaración de la interfaz cada una tendrá mas mienbros.
Cita:
Iniciado por limboings Ver Mensaje
...
Un saludo y gracias!!
De nada
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:52.