Relate a user input to a class pointer

Asked

Viewed 40 times

0

I would like to relate the class pointer corresponding to the user input and present on the screen the attributes related to that object.

#include <iostream>
#include "classes.h"

using namespace std;

int main()
{
    string sLeitor,sLivro,*pLivro;
    int iLivro;
    cout << "Digite o numero do livro que deseja ler: ";
    cin >> iLivro;
    sLivro = "livro" + to_string(iLivro);  // tentei converter int para string para ponteiro

    pLivro << sLivro; 
    cin.ignore();

    cout << "Digite seu nome: ";
    getline(cin,sLeitor);
    cout << endl;

    Livros *livro1 = new Livros("Pesquisa Operacional","Wagner",851,sLeitor);
    Livros *livro2 = new Livros("Probabilidade e Estatistica","Spiegel",517,sLeitor);
    Livros *livro3 = new Livros("Um Curso de Calculo - Volume 1","Guidorizzi",580,sLeitor);

    pLivro->consultar();

    return 0;
}
// A classe está assim, tem alguns recursos a mais:

#ifndef CLASSES_H_INCLUDED
#define CLASSES_H_INCLUDED

using namespace std;

class Livros{
public:
    Livros (string sNome, string sAutor, int iQdtPaginas, string sLeitor);
    ~Livros();
    void setNome(string sNome);
    string getLeitor();
    string getNome();
    void consultar();

private:
    string sNome;
    string sAutor;
    int iQtdPaginas=0;
    string sLeitor;
};

Livros::Livros(string sNome, string sAutor, int iQtdPaginas, string sLeitor){
    this->sNome=sNome;
    this->sAutor=sAutor;
    this->iQtdPaginas=iQtdPaginas;
    this->sLeitor=sLeitor;
}

void Livros::setNome(string sNome){
    this->sNome=sNome;
}

string Livros::getLeitor(){
    return this->sLeitor;
}

string Livros::getNome(){
    return this->sNome;
}

Livros::~Livros(){
    cout << "Objeto destruido!" << endl;
}

void Livros::consultar(){
    cout << "Nome do livro: " << this->sNome << endl;
    cout << "Nome do autor: " << this->sAutor << endl;
    cout << "Quantidade de paginas: " << this->iQtdPaginas << endl;
    cout << "Leitor(a): " << this->sLeitor << endl;
    cout << endl;
}

#endif // CLASSES_H_INCLUDED

2 answers

0

That way my problem was solved

#include <iostream>
#include "classes.h"
#include <vector>

using namespace std;

int main()
{
    string sLeitor;
    cout << "Digite seu nome: ";
    getline(cin,sLeitor);

    vector <Livros> biblioteca {
        Livros("Um Curso de Calculo - Volume 1","Guidorizzi",580,sLeitor),
        Livros("Os elementos","Euclides",600,sLeitor),
        Livros("Principia","Newton",328,sLeitor),
        Livros("Introduction to Quantum Mechanics","Griffiths",508,sLeitor),
        Livros("Licoes de Fisica","Feynman",1604,sLeitor)
    };

    int iLivro;
    cout << "Digite o numero do livro que deseja ler: ";
    cin >> iLivro;
    cout << endl;

    if(iLivro <= biblioteca.size()){
        biblioteca.at(iLivro-1).consultar();
    }else{
        cout << "A biblioteca nao possui esse livro" << endl;
    }
    return 0;
}

0


My suggestion for you is to use a vector as a book container and use the structure indexers as options in a selection menu.

#include <vector>
#include <iostream>
#include "classes.h"
using namespace std;

int main()
{
    string sLeitor;
    cout << "Digite seu nome: ";
    getline(cin,sLeitor);
    cout << endl;

    std::vector<Livros> biblioteca {
        Livros("Pesquisa Operacional","Wagner",851,sLeitor),
        Livros("Probabilidade e Estatistica","Spiegel",517,sLeitor),
        Livros("Um Curso de Calculo - Volume 1","Guidorizzi",580,sLeitor)
    };

    int index = 0;
    cout << "Livros Disponíveis\n";
    for(auto livro : biblioteca) {
        std::cout << index++ << "->\t" << livro.getNome() << "\n";
    }
    cout << "Digite o numero do livro que deseja ler: ";
    int iLivro; cin >> iLivro;

    if(iLivro < biblioteca.size())
        biblioteca.at(iLivro).consultar();

    return 0;
}

If you need dynamic allocation you will need to adjust the vector to accommodate the pointers, but in this implementation you will never need to expose the pointers to the user interface.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.