Ir ao conteúdo
  • Cadastre-se

ROR

Membro Júnior
  • Posts

    18
  • Cadastrado em

  • Última visita

posts postados por ROR

  1. @arfneto Complicado!! hahaha. Vocês têm alguma recomendação de livro mais técnico que trata essas abordagens e "boas práticas"? Eu to usando o livro do Deitel de 2006 para ter uma base, uma "noção" sobre classes, objetos, relacionamento, encapsulamento, polimorfismo, etc, mas to vendo que terei de usar livros mais novos pra usar os recursos mais atualizados. E eu queria ver um livro com uns exemplos maiores, mais complexos. Os livros do Deitel tem exemplos mais "simples", entre 80 a 150 linhas... Queria uns exemplos de programas completos, mais robustos, que usasse várias dessas técnicas e conceitos em um único programa. Qual compilador vcs costumam usar? E entre C++, Java, Python e C#, qual vcs acham mais robusto e que mais está sendo utilizado nas aplicações atuais?

  2. eu fiz um exemplo mais simples usando o operador new. seria algo nesse estilo? eu testei inserindo 5 usuários e funcionou em um compilador online mas quando eu tento inserir 10 elementos ele roda mas apresenta uma msg de erro no final.

     

    @V!OLADOR @arfneto

    //main
    #include <iostream>
    using std::cout;
    using std::cin;
    
    #include "memoria.h"
    
    int main ()
    {
    	int numero;
    	int i;
    	cout << "informe a quantidade de usuarios: ";
    	cin >> numero;
    	
    		
    	for (i = 0; i < numero; i++)
    	{
    	memoria* m = new memoria[i];
    	m[i].setValor();
    	m[i].imprime();
    	delete[] m;
    	}
    	
    				
    	return 0;
    }
                               
    //memoria.h
    class memoria
    {
    	public:
    		void setValor();
    		void imprime();
    	private:
    		int valor;
    };
                               
    //memoria.cpp
    #include <iostream>
    using std::cout;
    
    #include "memoria.h"
    
    void memoria::setValor()
    {
        valor = 20;
    }
    
    void memoria::imprime()
    {
    	cout << valor << "\n";
    }

     

  3. @V!OLADOR eu faço isso na main mesmo (no momento de criar o objeto)? Eu posso fazer um for que seja do tamanho da quantidade de trabalhadores que o usuário vai criar, algo como:

     

    int numero;

    cout << "informe a quantidade de trabalhadores: ";

    cin >> numero;

    for (i = 0; i < numero; i++)

     

    mas qual a sintaxe eu uso pra passar numero para o vetor (vamos supor que o usuário queira criar 10 objetos trabalhador. como o compilador diferencia cada um 10 objetos, como é feita a indexação)? e qual a sintaxe eu uso para que um objeto específico do vetor chame um método (como eu faço a indexação para que um objeto específico chame um método)?

     

    tem como dar um exemplo prática de como ficaria em um código?

  4. 2 horas atrás, arfneto disse:

    Esta errado. Que atributo seria esse?

    O atributo infoDado.

     

    2 horas atrás, arfneto disse:

    Não faz muita diferença se for o prompt apenas e ele está solto em main() tornando o programa impossível de ler sem a implementação das classes, o que não é nada bom.

    Como assim?

     

    2 horas atrás, arfneto disse:

    Isso não é um construtor e a garantia de nada srve, já que vai reatribuir o valor do único campo a partir de um getline()

    Eu uso o construtor para chamar setInfoDado e através dele iniciar o atributo (mesmo que depois eu vá reatribuir outro valor).

     

    2 horas atrás, arfneto disse:

    Tem muitas maneiras de fazer isso. Podia usar inner classes, herança, polimorfismo para os construtores. 

    Eu ainda não cheguei a estudar herança e polimorfismo, por isso eu quero usar apenas composição que é a parte que eu já cheguei pra fazer o que eu preciso fazer (mesmo que seja mais complicado, demorado e ineficiente...) À medida que eu for estudando os próximos conteúdos eu vou aprimorando o código.

     

    2 horas atrás, arfneto disse:

    Do modo como fez não está bom e não vai aprender muito a partir desse programa. E está errado. Chamar os construtores das classes internas direto no construtor de trabalhador também não é boa ideia: pouco flexível.

    No livro do Deitel que eu estou usando como referência ele apresenta um exemplo dessa forma. Mas isso na parte da composição, que é o que eu estou lendo até agora... pode ser que nos outros temas ele apresente exemplos de outras formas. Mas eu gostaria de fazer assim primeiro para ganhar mais "experiência" no que eu já estudei para depois passar para os próximos conteúdos.

     

    2 horas atrás, arfneto disse:

    É o mais comum. E funciona. Preste atenção ao modo certo de inicializar variáveis. E ao polimorfismo.

    O problema é que eu não entendi as duas primeiras linhas depois do public porque eu ainda não estudei a parte do polimorfismo... por isso eu gostaria de fazer sem usar polimorfismo e herança (por mais ineficiente que o código seja) apenas para aprofundar mais no conhecimento que eu já aprendi e saber o que é possível fazer com o que eu já sei (mesmo de forma ineficiente) e o que não é possível fazer com o que eu já sei

     

    2 horas atrás, arfneto disse:

    E veja em main() os dois construtores em uso. 

    como assim?

  5. 36 minutos atrás, arfneto disse:

    Tem 3 classes com um único campo e quer usar várias instâncias como por exemplo uma info para ter o funcionário e outra para o CPF.

    Isso. Eu tenho "vários" objetos diferentes da mesma classe que representam atributos diferentes apesar de usar a mesma variável pra isso.

     

    39 minutos atrás, arfneto disse:

    Mas porque não declarar os campos apenas?

    Eu poderia fazer isso também mas preferi optar por usar objetos diferentes da mesma classe. No caso da classe info por exemplo, eu poderia ter um atributo nome e um atributo cpf mas acabei optando por objetos diferentes para representar atributos com cada objeto com um único atributo (isso é só um escopo, um esqueleto... depois eu posso alterar e aumentar as classes)

     

    53 minutos atrás, arfneto disse:

    info(string = "");

    Um construtor padrão apenas para instanciar o atributo.

    1 hora atrás, arfneto disse:

    cout << "Nome: ";

    Se eu colocar essa instrução eu precisarei alterar a descrição dos métodos (incluir métodos, inserir chamadas na main já que eu precisaria ter uma para o cpf também).

    56 minutos atrás, arfneto disse:

    info::info(string info) { setInfoDado(info); } void info::setInfoDado(string info) { infoDado = info; setInfo(); }

    Construtor para instanciar o atributo do objeto e garantir que ele esteja em um estado consistente.

     

    1 hora atrás, arfneto disse:

    E se as classes info só são usadas dentro de trabalhador porque não define internamente? E se elas só tem uma string porque existem?

    Eu quero trabalhar o conceito da composição.

  6. 2 minutos atrás, arfneto disse:

     Sim. A versão de main que não funciona. a classe e o header são os mesmos ainda?

    As classes e cabeçalhos são os mesmos mas estou mandando o código todo aqui.

    //main
    #include <iostream>
    using std::cerr;
    using std::cin;
    using std::cout;
    using std::endl;
    using std::ios;
    
    #include <fstream> 
    using std::ofstream;
    
    #include <cstdlib>
    using std::exit;
    
    #include "trabalhador.h"
    
    int main()
    {
    	ofstream saidaArquivoCadastro( "cadastro.dat", ios::out );
    	
    	if ( !saidaArquivoCadastro ) // operador ! sobrecarregado
     {
     cerr << "Arquivo nao pode ser aberto" << endl;
     exit( 1 );
     }
     
    	cout << "Informe a quantidade de funcionarios a serem cadastrados: ";
    	int quantidade;
    	cin >> quantidade;
    	cout << quantidade;
    	cout << "\nInforme os dados: \n";
    	cout << "Nome do funcionario: ";
    	info i1;
    	cout << "\nCPF: ";
    	info i2;
    	cout << "\nNome da mae: ";
    	familia f1;
    	cout << "\nNome do pai: ";
    	familia f2;
    	trabalhador t(i1, i2, f1, f2);
    	
    	return 0;
    }
      
      //trabalhador.h
      #ifndef TRABALHADOR_H
    #define TRABALHADOR_H
    
    #include "info.h"
    #include "familia.h"
    
    class trabalhador
    {
    	public:
    		trabalhador (const info &, const info &, const familia &, const familia &);
    		void print () const;
    	private:
    		const info funcionarioNome;
    		const info funcionarioCPF;
    		const familia mae;
    		const familia pai;
    };
    
    #endif
      
      //trabalhador.cpp
      #include <iostream>
    using std::cout;
    
    #include "trabalhador.h"
    #include "info.h"
    
    trabalhador::trabalhador (const info &infoNome, const info &infoCPF,
    const familia &famiMae, const familia &famiPai)
    :funcionarioNome (infoNome),
    funcionarioCPF (infoCPF),
    mae (famiMae),
    pai (famiPai)
    {
    	cout << "\nDados do funcionario: \n";
    	print();
    }
    
    void trabalhador::print() const
    {
    	funcionarioNome.print();
    	funcionarioCPF.print();
    	mae.print();
    	pai.print();
    }
    
      //info.h
      #include <string>
    using std::string;
    
    #ifndef INFO_H
    #define INFO_H
    
    class info
    {
    	public:
    		info (string = "");
    		void setInfoDado (string);
    		void setInfo ();
    		void print () const;
    	private:
    		string infoDado;
    };
    
    #endif
      
      //info.cpp
      #include <iostream>
    using std::cout;
    using std::cin;
    
    #include <string>
    using std::string;
    using std::getline;
    
    #include "info.h"
    
    info::info (string info)
    {
    	setInfoDado (info);
    }
    
    void info::setInfoDado (string info)
    {
    	infoDado = info;
    	setInfo();
    }
    
    void info::setInfo ()
    {
    	string nome;
    	getline (cin, nome);
    	infoDado = nome;
    }
    
    void info::print () const
    {
    	cout << infoDado << "\n";
    }
      
      //familia.h
      #include <string>
    using std::string;
    
    #ifndef FAMILIA_H
    #define FAMILIA_H
    
    class familia
    {
    	public:
    		familia (string = "");
    		void setFamiDado (string);
    		void setFami ();
    		void print () const;
    	private:
    		string famiDado;
    };
    
    #endif
      
      //familia.cpp
      #include <iostream>
    using std::cout;
    using std::cin;
    
    #include <string>
    using std::string;
    using std::getline;
    
    #include "familia.h"
    
    familia::familia (string info)
    {
    	setFamiDado (info);
    }
    
    void familia::setFamiDado (string info)
    {
    	famiDado = info;
    	setFami();
    }
    
    void familia::setFami ()
    {
    	string nome;
    	getline (cin, nome);
    	famiDado = nome;
    }
    
    void familia::print () const
    {
    	cout << famiDado << "\n";
    }

     

    • Curtir 1
  7. 3 horas atrás, ROR disse:

    cout << "Informe a quantidade de funcionarios a serem cadastrados: ";

    int quantidade;

    cin >> quantidade;

    cout << quantidade;

    Percebi que esse problema acontece apenas quando eu coloco a instrução cin >> quantidade;. Quando eu não coloco essa instrução o cursor para em cout << "Nome do funcionario: "; para que eu possa digitar o nome do usuário (uma vez que ao instanciar o objeto i1  o método da classe info 

     

    3 horas atrás, ROR disse:

    void info::setInfo ()

    faz com que o programa espere o usuário digitar o nome). Quando eu coloco a instrução cin >> quantidade; algo faz com que esse método ou a instrução de atribuição no escopo desse método não seja executada. O interessante é que quando o objeto i2 é instanciado o código funciona normalmente (com ou sem a instrução cin >> quantidade; antes do objeto i1).

     

    36 minutos atrás, arfneto disse:

    Posicionar as declarações para usar os construtores como se fossem mecanismos de leitura não é boa ideia. Não vai ganhar nada com isso. 

    Eu usei o construtor tanto para instanciar os atributos dos objetos como também para ler o que o usuário digitar.

  8. Eu tenho um código na main que funciona normalmente. Esse código diz que o usuário deverá informar os dados e  pede que o usuário digite o nome do funcionário e a instrução seguinte inicia o objeto i1. O objeto i1 chama seu construtor e o restante do código segue até o programa (na main) solicitar que o usuário digite o CPF do funcionário e a instrução seguinte inicia o objeto i1. O que eu não entendo é o que acontece quando eu altero o código da main. Quando eu insiro 4 linhas antes da linha que diz que o usuário deverá informar os dados, solicitando que o usuário informe quantos funcionários serão cadastrados, declaro uma variável quantidade, leio a variável quantidade informada pelo usuário e imprimo o valor da variável quantidade, o programa chega a imprimir que o usuário deverá informar os dados e pede que o usuário digite o nome do funcionário mas então o cursor já vai para a linha onde o usuário deve informar o CPF não permitindo que ele digite o nome do funcionário. Por que isso acontece?

    //código da main que não está funcionando corretamente
    int main()
    {
    	ofstream saidaArquivoCadastro( "cadastro.dat", ios::out );
    	
    	if ( !saidaArquivoCadastro ) // operador ! sobrecarregado
     {
     cerr << "Arquivo nao pode ser aberto" << endl;
     exit( 1 );
     }
     
    	cout << "Informe a quantidade de funcionarios a serem cadastrados: ";
    	int quantidade;
    	cin >> quantidade;
    	cout << quantidade;
    	cout << "\nInforme os dados: \n\n";
    	cout << "Nome do funcionario: ";
    	info i1;
    	cout << "\nCPF: ";
    	info i2;
    
    //código da main que está funcionando corretamente
    int main()
    {
    	ofstream saidaArquivoCadastro( "cadastro.dat", ios::out );
    	
    	if ( !saidaArquivoCadastro ) // operador ! sobrecarregado
     {
     cerr << "Arquivo nao pode ser aberto" << endl;
     exit( 1 );
     }
     
    	
    	cout << "\nInforme os dados: \n\n";
    	cout << "Nome do funcionario: ";
    	info i1;
    	cout << "\nCPF: ";
    	info i2;
    
    //descrição da classe info
    #include <string>
    using std::string;
    
    #ifndef INFO_H
    #define INFO_H
    
    class info
    {
    	public:
    		info (string = "");
    		void setInfoDado (string);
    		void setInfo ();
    		void print () const;
    	private:
    		string infoDado;
    };
    
    #endif
      
      //descrição dos métodos info
      #include <iostream>
    using std::cout;
    using std::cin;
    
    #include <string>
    using std::string;
    using std::getline;
    
    #include "info.h"
    
    info::info (string info)
    {
    	setInfoDado (info);
    }
    
    void info::setInfoDado (string info)
    {
    	infoDado = info;
    	setInfo();
    }
    
    void info::setInfo ()
    {
    	string nome;
    	getline (cin, nome);
    	infoDado = nome;
    }
    
    void info::print () const
    {
    	cout << infoDado << "\n";
    }

     

    • Curtir 1
  9. Eu tenho um código com encapsulamento e composição com 3 classes em C++. No meu código eu tenho de ciar os objetos de forma estática mas quero criá-los de forma dinâmica. Eu tenho uma classe chamada trabalhador que tem 2 objetos de outras 2 classes (info e familia) como seus membros, de forma que trabalhador tem info e familia. Toda vez que eu quero criar um objeto trabalhador (que tem info e familia) eu tenho de fazê-lo de forma manual (estática) mas quero fazê-lo dinamicamente. Eu quero que o usuário escolha quantos trabalhadores ele quer criar dinamicamente. Eu acho que eu deveria usar estruturas de dados como uma lista e alocação dinâmica de memória mas eu não sei como fazê-lo. Meu código também cria um arquivo chamado "cadastro.dat" e eu quero ler esse arquivo mas também não sei como fazê-lo. Alguém poderia me ajudar? Estou mostrando o código que já fiz.

    //MAIN
    #include <iostream>
    using std::cerr;
    using std::cin;
    using std::cout;
    using std::endl;
    using std::ios;
    
    #include <fstream> 
    using std::ofstream;
    
    #include <cstdlib>
    using std::exit;
    
    #include "trabalhador.h"
    
    int main()
    {
        ofstream saidaArquivoCadastro( "cadastro.dat", ios::out );
        
        if ( !saidaArquivoCadastro ) // operador ! sobrecarregado
     {
     cerr << "Arquivo nao pode ser aberto" << endl;
     exit( 1 );
     }
     
        cout << "INFORME OS DADOS SOLICITADOS: \n\n";
        cout << "Nome do funcionario: ";
        info i1;
        cout << "\nCPF: ";
        info i2;
        cout << "\nNome da mae: ";
        familia f1;
        cout << "\nNome do pai: ";
        familia f2;
        trabalhador t(i1, i2, f1, f2);
        
        return 0;
    }
    
    
    
    //trabalhador.h
    #ifndef TRABALHADOR_H
    #define TRABALHADOR_H
    
    #include "info.h"
    #include "familia.h"
    
    class trabalhador
    {
        public:
            trabalhador (const info &, const info &, const familia &, const familia &);
            void print () const;
        private:
            const info funcionarioNome;
            const info funcionarioCPF;
            const familia mae;
            const familia pai;
    };
    
    #endif
    
    
    
    //trabalhador.cpp
    #include <iostream>
    using std::cout;
    
    #include "trabalhador.h"
    #include "info.h"
    
    trabalhador::trabalhador (const info &infoNome, const info &infoCPF,
    const familia &famiMae, const familia &famiPai)
    :funcionarioNome (infoNome),
    funcionarioCPF (infoCPF),
    mae (famiMae),
    pai (famiPai)
    {
        cout << "\nDados do funcionario: \n";
        print();
    }
    
    void trabalhador::print() const
    {
        funcionarioNome.print();
        funcionarioCPF.print();
        mae.print();
        pai.print();
    }
    
    
    
    //info.h
    #include <string>
    using std::string;
    
    #ifndef INFO_H
    #define INFO_H
    
    class info
    {
        public:
            info (string = "");
            void setInfoDado (string);
            void setInfo ();
            void print () const;
        private:
            string infoDado;
    };
    
    #endif
    
    
    
    //info.cpp
    #include <iostream>
    using std::cout;
    using std::cin;
    
    #include <string>
    using std::string;
    using std::getline;
    
    #include "info.h"
    
    info::info (string info)
    {
        setInfoDado (info);
    }
    
    void info::setInfoDado (string info)
    {
        infoDado = info;
        setInfo();
    }
    
    void info::setInfo ()
    {   
        string nome;
        getline (cin, nome);
        infoDado = nome;
    }
    
    void info::print () const
    {
        cout << infoDado << "\n";
    }
    
    
    
    //familia.h
    #include <string>
    using std::string;
    
    #ifndef FAMILIA_H
    #define FAMILIA_H
    
    class familia
    {
        public:
            familia (string = "");
            void setFamiDado (string);
            void setFami ();
            void print () const;
        private:
            string famiDado;
    };
    
    #endif
    
    
    
    //familia.cpp
    #include <iostream>
    using std::cout;
    using std::cin;
    
    #include <string>
    using std::string;
    using std::getline;
    
    #include "familia.h"
    
    familia::familia (string info)
    {
        setFamiDado (info);
    }
    
    void familia::setFamiDado (string info)
    {
        famiDado = info;
        setFami();
    }
    
    void familia::setFami ()
    {   
        string nome;
        getline (cin, nome);
        famiDado = nome;
    }
    
    void familia::print () const
    {
        cout << famiDado << "\n";
    }

     

  10. Olá, pessoal, tudo bem? Eu entendo um pouco de arquitetura e organização de computadores, sistemas operacionais, programação e eu to querendo escrever um sistema operacional. Eu sei que o processo é mais longo e complexo mas eu já li os livros do Tannembaum e Deitel e to querendo um pouco da leitura e ir mais para uma parte mais prática, de escrever os primeiros códigos, etc. Alguém tem alguma ideia por onde eu posso começar? Escrever um bootloader ou usar algum já desenvolvido? Quais passos iniciar eu posso seguir, onde eu posso procurar uma informação mais detalhada e inicial para eu começar a escrita?

    • Obrigado 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!