Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
VirtualDarckness

C++ orientação a objeto c++

Recommended Posts

Galera estou aprendente pelo o livro "treinamento em linguagem c++" e não estou entendendo esse código no livro estou copiando do mesmo jeito mas esta tando esses erros, alguém pode me explicar o que esta errado ?

 

estou usando o Visual Studio.

deste de já agradeço.

class Data
{
public:
    int dia, mes, ano;

private:
    int Bissexto( )      //fuçao inline
    {
        return (ano % 4 == 0 && ano % 100 || ano % 400 == 0);
    }

    void InitData(int d, int m, int a) //inicializaçao de dados
    {
        void PrintData();
        void PrintSigno();
        void PrintBissexto();
    };
    void Data::InitData(int d, int m, int a)                          //o nome qualificado não e permitido a em declaração de membro << esta tanto esse erro nesse lugares 
    {
        int dmes[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
        ano = a > 0 ? a : 1;//valida ano
        dmes[2] = dmes[2] + Bissexto();
        mes = m >= 1 && m <= 12 ? m : 1; //valida mes
        dia = d >= 1 && d <= dmes[mes] ? d : 1;//valida dia
    }
    void Data::PrintData()                                              //o nome qualificado não e permitido a em declaração de membro
    {
        char nome[13][10] =
        { "zero","janeiro","fevereiro","março","abriu",
            "maio","junho","julho","agosto","setembro",
            "outubro","novembro","dezembro"
        };
        cout << dia << "de" << nome[mes] << "de" << ano << endl;
    }

    void Data::PrintSigno()                          //o nome qualificado não e permitido a em declaração de membro
    {
        char nsigno[14][12] =
        {
            "zero","capricornio","aquario","peixes","aries",
            "touro","gemeos","leao","virgem",
            "libra","escorpiao","sagitario","capricornio"
        };
        int sig[] = { 0,20,19,20,20,20,20,21,22,22,22,21,21 };        if (dia < sig[mes])
            cout << "Signo: " << nsigno[mes] << endl;
        else
            cout << "signo: " << nsigno[mes + 1] << endl;
    }
     Data::PrintBissexto()                            //o nome qualificado não e permitido a em declaração de membro
    {
        if (Bissexto())
            cout << "ano e bissexto." << endl;
        else
            cout << "ano nao e bissexto." << endl;
    }
    
};

int main()                                                                                         
     {
         Data x, y, z;
         x.InitData(14, 6, 1992);   // aqui esta falando que a função esta inacessível << em todos elas 
         y.InitData(12, 1, 1976);
         z.InitData(30, 7, 1978);



         x.PrintData();
         x.PrintData();

         x.PrintBissexto();



         y.PrintData();
         y.PrintData();
         y.PrintBissexto();



         z.PrintData();
         z.PrintData();
         z.PrintBissexto();
     }

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

@VirtualDarckness Olá. É o seguinte amigo. Do modo como está sua classe Data você deixou os métodos dessa classe como privados. Devem ser públicos. Os atributos q devem ficar como privados, pela questão do encapsulamento

Basicamente seu código ficaria assim (eu teria q analisar melhor o código, mas postando assim você já vai se localizar):

 

Arquivo Data.hpp

#pragma once

class Data
{
public:
    Data(int d, int m, int a); // construtor parametrizável
    Data(); // construtor padrão
    // métodos da classe
    int Bissexto();
    void InitData(int d, int m, int a); //inicializaçao de dados
    void PrintData();
    void PrintSigno();
    void PrintBissexto();

// atributos
private:
    int dia, mes, ano;
};

Arquivo Data.cpp:

#include <iostream>
using namespace std;

#include "Data.hpp"

Data::Data()
{
	
}

// construtor paramatrizável (o contrutor só é chamado ao criar um novo objeto com o operador new
Data::Data(int d, int m, int a) {
    this->dia = d;
    this->mes = mes;
    this->ano = ano;
    // aqui não entendi por que chamar esses métodos no contrutor
    PrintData();
    PrintSigno();
    PrintBissexto();
}

int Data::Bissexto( )      //fuçao inline
{
    return (ano % 4 == 0 && ano % 100 || ano % 400 == 0);
}


void Data::InitData(int d, int m, int a)                          //o nome qualificado não e permitido a em declaração de membro << esta tanto esse erro nesse lugares
{
    int dmes[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    ano = a > 0 ? a : 1;//valida ano
    dmes[2] = dmes[2] + Bissexto();
    mes = m >= 1 && m <= 12 ? m : 1; //valida mes
    dia = d >= 1 && d <= dmes[mes] ? d : 1;//valida dia
}
void Data::PrintData()                                              //o nome qualificado não e permitido a em declaração de membro
{
    char nome[13][10] =
    {   "zero","janeiro","fevereiro","março","abriu",
        "maio","junho","julho","agosto","setembro",
        "outubro","novembro","dezembro"
    };
    cout << dia << " de " << nome[mes] << " de " << ano << " " << endl;
}

void Data::PrintSigno()                          //o nome qualificado não e permitido a em declaração de membro
{
    char nsigno[14][12] =
    {
        "zero","capricornio","aquario","peixes","aries",
        "touro","gemeos","leao","virgem",
        "libra","escorpiao","sagitario","capricornio"
    };
    int sig[] = { 0,20,19,20,20,20,20,21,22,22,22,21,21 };
    if (dia < sig[mes])
        cout << "Signo: " << nsigno[mes] << endl;
    else
        cout << "signo: " << nsigno[mes + 1] << endl;
}
void Data::PrintBissexto()                            //o nome qualificado não e permitido a em declaração de membro
{
    if (Bissexto())
        cout << "ano e bissexto." << endl;
    else
        cout << "ano nao e bissexto." << endl;
}

Arquivo com o método Main. Pode ser Data_main.cpp

#include "Data.hpp"
#include "Data.cpp"

int main()
{
    Data x, y, z;
    x.InitData(14, 6, 1992);   
    y.InitData(12, 1, 1976);
    z.InitData(30, 7, 1978);

    x.PrintData();    
    x.PrintBissexto();
    x.PrintSigno();    

    y.PrintData();    
    y.PrintBissexto();
    y.PrintSigno();

    z.PrintData();    
    z.PrintBissexto();
    z.PrintSigno();
}

Aqui tá rodando. Criei os três arquivo e tudo ok. Experimenta aí para ver se vai, ok?

adicionado 18 minutos depois

Se quiser criar um novo objeto da classe Data seria isso: (perceba q está dando erro, por isso chame os métodos aqui):

Data *data = new Data(24, 3, 2011); // aqui os métodos do contrutor são chamados, mas tá dando erro no resultado
    
delete data; // libera o objeto da memória

 

Editado por giu_d
Correção no código
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
20 horas atrás, giu_d disse:

ano = a > 0 ? a : 1;//valida ano

O ano Zero "existe" é normatizado (Wikipedia ISO 8601:2004), e considerado bissexto.

 

 

20 horas atrás, giu_d disse:

Aqui tá rodando.

Depois que @giu_d concertou, bastou alguns ajustes, fiz também alguns adaptações para favorecer ainda mais o style C++ e suas ferramentas, a função de signos retornou valor errado para meu signo então não sei rescrevi a tabela de signos e funcionou:

void Data::prnt_signo (){
  vector<char> dia_signo{0, 20, 18, 20, 20, 20, 20, 22, 22, 22, 22, 21, 21};
  vector<string> nsigno{"Capricornio",
                        //  ^~~~~~~
                        //  Fix:Bug para Janeiro <= 20
                        //
    "Aquario",    "Peixes", "    Aries",       "Touro",
     "Gemeos",    "Cancer",      "Leao",      "Virgem",
      "Libra", "Escorpiao", "Sagitario", "Capricornio"};
  //  ^~~~~~
  //  Tabela de correspondência Signo -> Data pego no Site AstroCentro
  //  Local: www.astrocentro.com.br/blog/astrologia/datas-cada-signo/
  //  Acessado em: 27 / 7 / 2018
  //
    if (dia_  <=  dia_signo.at (mes_)){
        cout << "Signo: " << nsigno.at (mes_ - 1) << endl;}
    else {
        cout << "Signo: " << nsigno.at (mes_) << endl;}
  return;}

Dúvidas?

 

adicionado 32 minutos depois

Atualizado: Fix-Problema quando mês é Janeiro e o Dia é <= 20.

Editado por AnsiC
Correção código-fonte
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×