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

Metodo gets da error "is private"

Estas en el tema de Metodo gets da error "is private" en el foro de C/C++ en Foros del Web. Hola amigos! Estoy aprendiendo a programar POO por mi cuenta y quiero hacer un programa que haga los cálculos y muestre el desplazamiento de una ...
  #1 (permalink)  
Antiguo 26/05/2016, 06:22
Avatar de SrKaesar  
Fecha de Ingreso: mayo-2016
Ubicación: Venezuela
Mensajes: 9
Antigüedad: 8 años
Puntos: 0
Pregunta Metodo gets da error "is private"

Hola amigos!

Estoy aprendiendo a programar POO por mi cuenta y quiero hacer un programa que haga los cálculos y muestre el desplazamiento de una partícula. Ahora cuando defino el método gets y compilo me da este error

" [Error] 'float Particula::vel_0' is private"

y no entiendo ¿por que? Les agradezco su ayuda.


#include <iostream>

using namespace std;


class Particula {

private:

string nombre;
float masa; //kg
float posX; // mts
float vel_0; // mts/s
float acel_0; // mts/s^2

public :

Particula(string name, float M, float X, float vel, float acel){

nombre = name;
masa = M;
posX = X;
vel_0 = vel;
acel_0 = acel;

cout << " Particula: " << nombre << endl;
cout << " Masa: " << masa << " Kg" << endl;
cout << " Posicion: " << posX << " mts" << endl;
cout << " Velocidad: " << vel_0 << " mts/s" << endl;
cout << " Aceleracion: " << acel_0 << " mts/s^2" << endl;
}

void setValores(string name, float M, float X, float vel, float acel);
float getVel();
float velocidad(float vel, float acel, float t);

};


void Particula::setValores(string name, float M, float X, float vel, float acel){

nombre = name;
masa = M;
posX = X;
vel_0 = vel;
acel_0 = acel;

}


float Particula::getVel(){
return vel_0);
}

float Particula::velocidad(float vel, float acel, float t){

vel = vel_0 + acel*t;
return vel;
}



const float g = 9.8;

int main(){


float t;
cout << endl << endl;

Particula p1("P_1", 1, 0,0,0);

cout << p1.vel_0;
cout << endl << " Tiempo: "; cin >> t;
cout << endl << " velocidad = " << p1.velocidad(0,g,t) << " mts/s";




cout << endl << endl;
system("pause");
return 0;

}
  #2 (permalink)  
Antiguo 26/05/2016, 06:43
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Metodo gets da error "is private"

Código C++:
Ver original
  1. class Particula {
  2.  private:
  3.   string nombre;
  4.   float masa; //kg
  5.   float posX; // mts
  6.   float vel_0; // mts/s
  7.   float acel_0; // mts/s^2

todo lo que esté en la parte private queda oculto a todo aquello que no pertenezca a la clase. Es por esta razón que el siguiente código si compila:

Código C++:
Ver original
  1. void Particula::setValores(string name, float M, float X, float vel, float acel){
  2.    nombre = name;
  3.    masa = M;
  4.   posX = X;
  5.   vel_0 = vel;
  6.   acel_0 = acel;
  7.  }

Pero el siguiente no:

Código C++:
Ver original
  1. int main(){
  2.    float t;
  3.    cout << endl << endl;
  4.  
  5.   Particula p1("P_1", 1, 0,0,0);
  6.   cout << p1.vel_0;

¿Soluciones?

La más habitual consiste en implementar un getter para recuperar el valor:

Código C++:
Ver original
  1. class Particula
  2. {
  3. public:
  4.   float Velocidad() const
  5.   { return vel_0; }
  6. };

Otra opción pasa por dejar las variables en la parte pública... ahora que si todo en la clase va a ser público entonces queda más limpio declarar la misma como struct que, a diferencia de class, su visibilidad por defecto es public:

Código C++:
Ver original
  1. struct Particula
  2. {
  3.   string nombre;
  4.   float masa; //kg
  5.   float posX; // mts
  6.   float vel_0; // mts/s
  7.   float acel_0; // mts/s^2
  8. };

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: int, metodo, programa
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 22:26.