[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