Programación General > C/C++
Duda sobre composición/agregación de clases.
(1/1)
moesan:
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.
ProfesorX:
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 :)
moesan:
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);
};
--- Fin de la cita ---
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;
}
--- Fin de la cita ---
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);
};
--- Fin de la cita ---
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];
}
--- Fin de la cita ---
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;
}
--- Fin de la cita ---
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.
Navegación
Ir a la versión completa