[C con Clase] Acceso a atributo privado de una clase. No lo consigo
Gastón Borysiuk
gaston.borysiuk en gmail.com
Jue Mayo 3 22:00:26 CEST 2012
Hola
Bueno no soy el mas groso en esto, pero yo cuando quiero acceder a un
atributo privado de una clase hago lo siguiente en el .h donde declaro
la clase.
class pepito
{
public:
////////
int getAtributo(){ return atributo;}
private:
int atributo;
};
Entonces luego en la instancia hago esto;
pepito *pepe;
int valoratributo = pepe->getAtributo();
Si vos tenes algo así:
//////
private:
int atributo;
no lo podes llamar desde afuera por que es privada de esa clase.
Yo lo hice siempre así creería que da error al compilar haciendo int
attr = pepe::atributo;
Saludos!
El jue, 03-05-2012 a las 18:32 +0200, redondo.af escribió:
> Hola a todos:
>
> No se como puedo acceder al atributo de una clase. He mirado el tema "41. Punteros a miembros" pero no consigo aclararme.
>
> Me da un error de compilación en el procedimiento
>
> void recorrerCola(cola &vlCola){ } que está dentro de procesos.cpp ya que no se como acceder a atributo valor de la clase nodo, despues de definir una instancia de esta clase llamada actual.
>
> void recorrerCola(cola &vlCola){
>
> nodo *actual = new nodo();
> int valor;
> nodo *aux;
>
>
> actual=vlCola.getPrimero();
> valor = actual::getValor();
> aux = actual::getSiguiente();
>
>
> }
>
>
> Los errores que me dan son:
>
> 55 procesos.cpp In function `void recorrerCola(cola&)' `actual' is not a class or namespace `getValor' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.)
>
>
> 56 procesos.cpp In function `void recorrerCola(cola&)' `actual' is not a class or namespace `getSiguiente' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.)
>
>
> Siento mucho la lata que os estoy dando. Pero es que son muchos conceptos nuevos
>
>
> Mil gracias de nuevo
>
>
>
>
>
> *************************************************************************
> ***** main.cpp
>
>
>
> #include <cstdlib>
> #include <iostream>
> #include <string>
> using namespace std;
>
> #include "clsCola.h"
> #include "procesos.h"
>
>
> int main(int argc, char *argv[])
> {
> int op, opsub;
> cola Cola;
> do
> {
>
> op = mostrarMenuMain();
>
> switch (op) //hace casting automatico a int p
>
> {
> case 0:
> cout <<"\n\t > ¡Adios!\n";
> break;
> case 1: // practica1 = Cola
> do{
> opsub = mostrarMenuCola();
> tratarOpcionCola(opsub, Cola);
> }while(opsub!=0);
> break;
> case 2: // practica 2
> cout << "\n\t > practica2\n";
> break;
> case 3: // practica 3
> cout << "\n\t > practica3\n";
> break;
> }
> }while(op!= 0);
> system("PAUSE");
> return EXIT_SUCCESS;
> }
>
>
>
>
> ****************************************************************************
> ******* cola.h
>
> #ifndef CLSCOLA_H
> #define CLSCOLA_H
>
>
> class nodo {
> public:
>
> nodo(); // siguiente(NULL){}
> ~nodo();
>
> int getValor();
> void setValor(int);
>
> nodo getSiguiente();
> void setSiguiente(const nodo &val);
>
>
> private:
> int valor;
> nodo *siguiente;
>
> friend class cola;
> };
>
> typedef nodo *pNodo;
>
>
> class cola {
> public:
> cola(); // : primero(NULL), ultimo(NULL) {}
> ~cola();
>
> pNodo getPrimero();
> void setPrimero(pNodo);
>
> pNodo getUltimo();
> void setUltimo(pNodo);
>
> bool esVacia();
> void anadir(int p);
> void borrar();
> void recorrer();
> // void insertar(string nombre,tProductos productos);
>
> private:
> pNodo primero, ultimo;
> int total;
> };
> typedef cola *pCola;
>
> #endif
>
>
> ************************************************************
> ****** nodo.cpp
>
>
> #include <cstdlib>
> #include <iostream>
> using namespace std;
>
> #include "clsCola.h"
>
> nodo::nodo() { siguiente=NULL; }
> nodo::~nodo(){}
>
> int nodo::getValor()
> { return this->valor; }
>
> void nodo::setValor(int val)
> { this->valor = val; }
>
> nodo nodo::getSiguiente()
> { return *siguiente; }
>
> void nodo::setSiguiente(const nodo &val)
> { *siguiente = val; }
>
>
> *************************************************************************
>
> ****Cola.cpp
>
>
>
> #include <cstdlib>
> #include <iostream>
> using namespace std;
>
> #include "clsCola.h"
>
> cola::cola() { primero=NULL; ultimo=NULL;}
> cola::~cola(){}
>
> pNodo cola::getPrimero()
> { return this->primero; }
>
> void cola::setPrimero(pNodo prim)
> { this->primero = prim; }
>
> pNodo cola::getUltimo()
> { return this->ultimo; }
>
> void cola::setUltimo(pNodo ult)
> { this->ultimo = ult; }
>
>
>
> bool cola::esVacia()
> {
> return (primero==NULL && ultimo==NULL);
>
> }
>
> void cola::anadir(int ped)
> {
> pNodo nuevo;
> nuevo = new nodo();
>
> if(esVacia()) //si esta vacia se asigna a la cabecera
> {
> primero=nuevo;
> ultimo=nuevo;
> }
> else
> {
> ultimo->siguiente = nuevo;
> ultimo=nuevo;
> }
>
> }
>
> void cola::borrar()
> {
> pNodo aux;
>
> aux=primero;
> primero= aux->siguiente;
> aux->siguiente=NULL;
> // Si primero es NULL es que había un único elemento
> if (primero==NULL){
> ultimo=NULL;
> }
>
>
> }
>
> int cola::consultarNodo(pNodo nodoCola){}
>
>
>
> ****************************************************************************
> ***** procesos.h
>
> #ifndef PROCESOS_H
> #define PROCESOS_H
>
> int mostrarMenuMain();
> int mostrarMenuCola();
> void recorrerCola(cola &b);
> void tratarOpcionCola(int a, cola &b);
>
> ****************************************************************************
> ***** procesos.cpp
>
>
> #include <string>
> using std::string;
> #include <iostream>
> using std::cin;
> using std::cout;
>
> #include "clsCola.h"
> #include "procesos.h"
>
> int mostrarMenuMain (){
> int op;
>
> system("cls");
> cout <<"\n Prácticas de Estructura de datos 2011/2012 ";
> cout <<"\n ------------------------------------------------";
> cout <<"\n 1. Práctica 1: Colas";
> cout <<"\n 2. Práctica 2: Listas";
> cout <<"\n 3. Práctica 3: Árboles";
> cout <<"\n ";
> cout <<"\n 0. Salir";
> cout <<"\n\n Opción: ";
> cin >> op;
> return op;
> }
>
>
> int mostrarMenuCola(){
> int op;
>
> system("cls");
>
> cout << "\n Gestión de Colas de Pedidos";
> cout <<"\n -----------------------------------------";
> cout <<"\n ";
> cout <<"\n 1. Añadir un pedido a cola";
> cout <<"\n 2. Servir el primer pedido de la cola";
> cout <<"\n 3. Consultar el primer pedido en cola";
> cout <<"\n 4. Determinar si hay pedidos pendientes en cola";
> cout <<"\n ";
> cout <<"\n 0. Salir";
> cout <<"\n\n Opcion: ";
> cin >> op;
> return op;
> }
>
> void recorrerCola(cola &vlCola){
>
> nodo *actual = new nodo();
>
> int valor;
> nodo *aux;
>
>
> actual=vlCola.getPrimero();
> valor = actual::getValor();
> aux = actual::getSiguiente();
>
> }
>
>
> //void tratarOpcionCola(int op){ //falta cola de tipo cola
> void tratarOpcionCola(int op, cola &vlCola){ //falta cola de tipo cola
> int num_ped;
> char resp;
>
> switch (op) //hace casting automatico a int p
>
> {
> case 0:
> cout <<"\n\t > ¡Vuelves al menú principal!\n";
> system("PAUSE");
> break;
> case 1: // practica1 = Cola
> system("cls");
> cout <<"\n pedido: ";
> cin >> num_ped;
> vlCola.anadir(num_ped);
> break;
> case 2: // practica 2
> if (vlCola.esVacia()){
> cout <<"\n No hay pedidos en cola";
> cout <<"\n";
> } else{
> system("cls");
> cout <<"\n Va a borrar el primer pedido de la cola.";
> cout <<"\n¿Desea continuar? S/N: ";
> cin >> resp ;
> if ((resp== 'S') && (resp=='s')){
> vlCola.borrar();
> }else{
>
>
> }
> }
> // if (resp=='S'){}
> break;
> case 3: // practica 3
> printf ("\n\t > practica3\n");
> break;
>
> case 4: // Determinar si hay pedidos pendientes
> system("cls");
> if (vlCola.esVacia()){
> cout <<"\n No hay pedidos pendientes en cola";
> cout <<"\n";
>
> } else
>
> { cout <<"\n Existen los siguientes pedidos pendientes:";
> cout <<"\n" ;
> // vlCola.recorrer();
> recorrerCola(vlCola);
> }
> system("PAUSE");
> break;
> }
>
> }
>
>
>
> #endif
> #ifndef CLSCOLA_H
> #define CLSCOLA_H
>
>
> class nodo {
> public:
>
> nodo(); // siguiente(NULL){}
> ~nodo();
>
> int getValor();
> void setValor(int);
>
> nodo getSiguiente();
> void setSiguiente(const nodo &val);
>
>
> private:
> int valor;
> nodo *siguiente;
>
> friend class cola;
> };
>
> typedef nodo *pNodo;
>
>
> class cola {
> public:
> cola(); // : primero(NULL), ultimo(NULL) {}
> ~cola();
>
> pNodo getPrimero();
> void setPrimero(pNodo);
>
> pNodo getUltimo();
> void setUltimo(pNodo);
>
> bool esVacia();
> void anadir(int p);
> void borrar();
> void recorrer();
>
> private:
> pNodo primero, ultimo;
> int total;
> };
> typedef cola *pCola;
>
> #endif
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120503/900b6395/attachment.html>
Más información sobre la lista de distribución Cconclase