Ir para conteúdo

bigbig

Members
  • Total de itens

    5
  • Registro em

  • Última visita

Reputação

1 Comum

Sobre bigbig

  1. Cast de classes

    Cara, pelo que isso diz, nem em Java você consegue acessar membros de uma classe derivada por meio de uma classe base. No entanto, por meio de um casting você pode fazer. É algo que ultrapassa os princípios de design de classes. Aqui você pode perceber o mesmo caso em C++. A solução é a mesma, embora ele não use uma variável em seu exemplo e sim um valor temporário. Resumidamente, você sempre vai poder criar instâncias de objetos derivados em variáveis de classe base. Só não é garantido o acesso dos membros da classe derivada, a menos que use casting.
  2. Cast de classes

    Em C++, o tipo da variável declarada é encarada como se tivesse um objeto daquele tipo nela, é por isso que seu código retorna isso: error: ‘class Animal’ has no member named ‘enterraOsso’ std::cout << animal->nome << ", " << animal->enterraOsso << std::endl; O compilador vai analisar a variável do tipo Animal e não vai encontrar tais membros lá. Se não me engano, já li em algum lugar que você pode fazer isso que você está tentando fazer, dessa maneira. Mas não tenho certeza... No entanto, uma maneira que conheço de resolver esse problema é fazendo um downcast através do dynamic_cast. Para usar dynamic_cast, a classe base deve ser considerada polimórfica, o que é conseguido através da declaração de pelo menos um método virtual. Geralmente quando não há um em questão, usa-se o destrutor. Assim, mude sua classe Animal para: class Animal { public: char* nome; Animal (char* nome) { this->nome = nome; } virtual ~Animal( ) { }; }; Então faça os dynamic casts: Cachorro* cachorro = dynamic_cast<Cachorro*>( animal ); Passaro* passaro = dynamic_cast<Passaro*>( animal ); Depois troque a variável animal pela equivalente adquirida pelo dynamic cast. Se alguém souber se é possível usar uma variável de classe base com objeto de classe derivada, diga aí. Uma vez que está usando ponteiros, não esqueça de deletá-los, embora eu recomende o uso de smart pointers... Se bem que acredito que seu código é apenas para aprendizado...
  3. [Resolvido] calculo de soma de fatorial em linguagem c

    Mal ae, não percebi que era C. Até onde sei, "constexpr" não tem em C. É só definir a função antes main ou declará-la antes de main e definir após. #include <stdio.h> int fac( int n ) { return ( n < 2 ) : 1 ? fac( n - 1 ); } int main( ) { // Pegue o input do usuário para o fatorial, passe para fac( input ) e imprima no console return 0; }
  4. [Resolvido] calculo de soma de fatorial em linguagem c

    Sei que o tópico está resolvido, mas decidi incluir apenas para expandir informações Da maneira recursiva abaixo, você pode usar tanto em tempo de execução quanto em tempo de compilação, sendo essa última mais eficiente (lógico que nesse caso insignificantemente) constexpr int fac( int i ) { return ( i < 2 ) ? 1 : fac( i − 1 ); }
  5. [Resolvido] Problema ao ler valores do teclado

    Só porque não tenho nada pra fazer #include <iostream> #include <cstdlib> #include <ctime> #include <chrono> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main( int argc, char* argv[ ] ) { using namespace std; auto now = chrono::system_clock::to_time_t( chrono::system_clock::now( ) ); int year = 1900 + localtime( &now )->tm_year; constexpr int array_size = 10; constexpr int max_name = 50; int i; int ra[ array_size ]; int idade[ array_size ]; int ano[ array_size ]; char nome[ array_size ][ max_name ]; char curso[ array_size ][ max_name ]; for( i = 0; i < array_size; i++ ) { cout << "Fatec" << endl; cout << "Registro de aluno\n" << endl; cout << "Digite o nome" << endl; cin >> nome[ i ]; cout << "Digite o RA" << endl; cin >> ra[ i ]; cout << "Digite a idade do aluno" << endl; cin >> idade[ i ]; cout << "Digite o nome do curso" << endl; cin >> curso[ i ]; cout << "Digite o ano de ingresso" << endl; cin >> ano[ i ]; system("cls"); } for( i = 0; i < array_size; i++ ) { if( idade[ i ] > 20 && ano[ i ] >= year - 3 ) { cout << nome[ i ] << endl; cout << ra[ i ] << endl; cout << idade[ i ] << endl; cout << curso[ i ] << endl; cout << "\n---" << endl; } } return 0; }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.