SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: moesan en Jueves 5 de Mayo de 2011, 16:53

Título: Duda sobre composición/agregación de clases.
Publicado por: moesan en Jueves 5 de Mayo de 2011, 16:53
Hola, soy nuevo en la programación de clases de C++, aunque llevo algo de tiempo programando en Java. Estoy programando algo sencillo para entrar en materia, y me he encontrado con algo que no entiendo.
El caso es el siguiente: Creo una clase Vértice, que contiene 3 variables privadas x, y y z, y una clase Poligono, que contiene un vector de tres vértices como variable privada. Lo que no entiendo es que, cuando intento modificar alguna de las variables (por ejemplo x) de uno de los vertices del vector de poligonos, ésta no se modifica y mantiene su valor inicial. És decir, cuando programo lo siguiente:

poligono p;
(...)
p.getVer(0).setX(1.0);

Al imprimir por pantalla esto:

cout << p.getVer(0).getX();

Me imprime por pantalla 0.0 (que es el valor por defecto) en lugar de 1.0.

Esto es normal?

P.D.: En caso de que haya dado pocos detalles sobre el código avisadme, y pondré la clase entera.
Título: Re: Duda sobre composición/agregación de clases.
Publicado por: ProfesorX en Jueves 5 de Mayo de 2011, 18:27
Debes tener algo mal en el metodo setx de tu clase, si es necesario que publiques el codigo de tu clase, para saber en donde esta el problema porque no es normal lo que mencionas.

Saludos :)
Título: Re: Duda sobre composición/agregación de clases.
Publicado por: moesan en Jueves 5 de Mayo de 2011, 21:11
Hola profesorX, gracias por contestar. Aquí tienes las clases:
Vertice.h
Citar
#include <GL/gl.h>
#include <GL/glut.h>

class Vertex {
   private:
      GLfloat x, y, z;   
   public:
      Vertex();               
      Vertex(GLfloat, GLfloat, GLfloat);
      GLfloat getX();               
      GLfloat getY();
      GLfloat getZ();   
      void setX(GLfloat);            
      void setY(GLfloat);
      void setZ(GLfloat);
};

Vertice.cpp
Citar
#include "vertice.h"

Vertex::Vertex(){
}

Vertex::Vertex(GLfloat x, GLfloat y, GLfloat z){
   this->x = x;
   this->y = y;
   this->z = z;
}

GLfloat Vertex::getX(){
   return this->x;
}

GLfloat Vertex::getY(){
   return this->y;
}

GLfloat Vertex::getZ(){
   return this->z;
}
void Vertex::setX(GLfloat x){
   this->x = x;
}

void Vertex::setY(GLfloat y){
   this->y = y;
}

void Vertex::setZ(GLfloat z){
   this->z = z;
}

polygon.h
Citar
#include "vertice.h"

class Polygon {
   private:
      Vertex v[3];               //Vector que contiene los tres vertices del poligono
   public:
      Polygon();               //Constructores
      Polygon(Vertex*);
      Vertex getVer(int);
};

polygon.cpp
Citar
#include "polygon.h"

Polygon::Polygon(){
   for(int i = 0 ; i < 3 ; i++){
      this->v.setX(0.0);
      this->v.setY(0.0);
      this->v.setZ(0.0);
   }
}

Polygon::Polygon(Vertex *v){
   this->v[0] = v[0];
   this->v[1] = v[1];
   this->v[2] = v[2];
}


Vertex Polygon::getVer(int n){
   return this->v[n];
}

main.cpp
Citar
#include <iostream>
#include "polygon.h"

using namespace std;

int main(){
   Polygon p;
   p.getVer(0).setX(1.0);
   p.getVer(0).setY(1.0);
   p.getVer(0).setZ(1.0);
   cout<< "Valor del vertice 0: (" << p.getVer(0).getX() << "," << p.getVer(0).getY() << "," << p.getVer(0).getZ()<<")."<<endl;
   return 0;
}

Al compilar main, devuelve lo siguiente:

Valor del vertice 0: (0,0,0).

Así que no se han modificado las coordenadas... Alguna idea sobre que es lo que pasa?

Muchas gracias.