C ++ POO The variable is not displayed correctly

0

I am doing a program of collection and payment of basic services in codeblocks

This is my code:

#include <iostream>
#include <cstdlib>

using namespace std;

class base { 
    private:
    //bienvenido
    char nick[30];
    //persona
    char opcion_persona;
    //menu
    int key;
    int opcion;
    //informacion
    int keyi;
    int opi;
    //salir
    char opcion_salir; 
    public:
    void bienvenido ();
    void persona ();
    void menu ();
    void informacion();
    void salir (); };

void base::bienvenido() {
    cout<<"\n\n\t\t\t\t";   
    cout<<"<:: Sistema de Facturacion DFP ::>";     
    cout<<"\n\n\t\t\t";     
    cout<<"> Bienvenido a Digital Fast Payment ";   
    cout<<"\n\n\t\t\t";     
    cout<<"< Ingrese un nick: ";    
    cin.getline(nick, 15, '\n');    
    cout<<"\n\n\t\t\t"; }

void base::persona() {
    while (opcion_persona!='n' && opcion_persona!='j')
    {
        system ("cls");
        cout<<"\n\n\t\t\t\t";
        cout<<"<:: Sistema de Facturacion DFP ::>";
        cout<<"\n\n\t\t\t";
        cout<<"> Hola "<<nick<<" usted es?";
        cout<<"\n\n\t\t\t";
        cout<<"(n) Persona natural";
        cout<<"\n\n\t\t\t";
        cout<<"(j) Persona juridica";
        cout<<"\n\n\t\t\t";
        cout<<"< Ingrese una opcion: ";
        cin>>opcion_persona;
        if (opcion_persona!='n' && opcion_persona!='j')
        {
            cout<<"\n\t\t\t";
            cout<<"> Ingrese una opcion correcta";
            cin.get();
            cin.get();
        }
    } }

void base::menu() {
    base principal;
    while (key!=1)  
        {       system("cls");
        cout<<"\n\n\t\t\t\t";
        cout<<"<:: Sistema de Facturacion DFP ::>";
        cout<<"\n\n\t\t\t";
        cout<<"> Menu de opciones";
        cout<<"\n\n\t\t\t";
        cout<<"1 - Informacion";
        cout<<"\n\n\t\t\t";
        cout<<"2 - Pago de servicios";
        cout<<"\n\n\t\t\t";
        cout<<"3 - Salir";
        cout<<"\n\n\t\t\t";
        cout<<"< Elija una opcion "<<nick<<": ";
        cin>>opcion;
        if (opcion!=1 && opcion!=2 && opcion!=3)        
        {           key=0;          
        cout<<"\n\t\t\t";           
        cout<<"< Elija una opcion de menu";             
        cin.get();          
        cin.get();      }       
        else        
        key=1;      
        switch (opcion)         
        {           case 1:
                {
                    principal.informacion();
                    key=0;
                    break;}             case 2:
                {
                    key=0;
                    break;}             case 3:
                {
                    principal.salir();
                    key=0;
                    break;}
        }

    }

}

void base::informacion() {
    base informacion;
    while (keyi!=1)     {
        system("cls");
        cout<<"\n\n\t\t\t\t";
        cout<<"<:: Sistema de Facturacion DFP ::>";
        cout<<"\n\n\t\t\t";
        //Aqui es el problema
        cout<<"> Aqui puede consultar los valores de los servicios "<<nick;
        cout<<"\n\n\t\t\t";
        cout<<"1 - Luz";
        cout<<"\n\n\t\t\t";
        cout<<"2 - Agua";
        cout<<"\n\n\t\t\t";
        cout<<"3 - Telefono";
        cout<<"\n\n\t\t\t";
        cout<<"4 - Internet";
        cout<<"\n\n\t\t\t";
        cout<<"5 - Tv pagada";
        cout<<"\n\n\t\t\t";
        cout<<"6 - Atras";
        cout<<"\n\n\t\t\t";
        cout<<"< Elija una opcion: ";
        cin>>opi;       if (opi!=1 && opi!=2 && opi!=3 && opi!=4 && opi!=5 && opi!=6)       {           keyi=0;             cout<<"\n\t\t\t";           cout<<"< Elija una opcion de menu";             cin.get();          cin.get();      }       else        keyi=1;         switch (opi)        {           case 1:
                {
                    keyi=0;
                    break;}             case 2:
                {
                    keyi=0;
                    break;}             case 3:
                {
                    keyi=0;
                    break;}             case 4:
                {
                    keyi=0;
                    break;}             case 5:
                {
                    keyi=0;
                    break;}             case 6:
                {
                    keyi=1;
                    break;}         }   }   keyi=0; }

void base::salir() {
    system("cls");
    cout<<"\n\n\t\t\t\t";
    cout<<"<:: Sistema de Facturacion DFP ::>";     
    cout<<"\n\n\t\t\t";     
    cout<<"> "<<char(168)<<"Desea salir del programa?";                   
    cout<<"\n\n\t\t\t";             
    cout<<"< 0 para salir o cualquier tecla para regresar: ";
    cin>>opcion_salir;  
    if (opcion_salir=='0')  
    exit(0); }

int main () {
    base cuerpo;
    cuerpo.bienvenido();
    cuerpo.persona();
    cuerpo.menu();
    return 0; }

My problem is the variable char nick [30] , at the time of executing the program and arriving at the main object.information " is not displayed correctly I fix it?

    
asked by Malthael 02.12.2016 в 19:00
source

1 answer

1
void base::menu()
{
  base principal;
  // ...
  principal.informacion();
}

If you are running a function of base , why are you creating a second object of type base ?

principal is a separate object and what you do in that object will not be reflected in the object on which you are executing the menu method.

An example to see it better

class NoFunciona
{
  public:

    NoFunciona() : var(0)
    {}

    void Func()
    {
      NoFunciona objetoLocal;
      objetoLocal.Func2();
      std::cout << objetoLocal.var << '\n';
      std::cout << var << '\n';
    }

    void Func2()
    { var = 1; }
};

int main()
{
  NoFunciona objeto;
  objeto.Func();
}

In the example you see the problem that you have. When creating a new object, it has its own life cycle and its variables are not shared by the container object. Be careful with that.

void base::menu()
{
  // ...
  informacion();
}

With this simple change you should work that part.

    
answered by 03.12.2016 / 22:54
source