Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, estou precisando criar uma variável do tipo object que poderá instanciar outros tipos que à herdam.
#include <iostream>
#include <cstdlib>
class Animal {
public:
char *nome;
Animal (char *nome) {
this->nome = nome;
}
};
class Cachorro : public Animal {
public:
bool enterraOsso;
Cachorro (char* nome, bool enterraOsso) : Animal(nome) {
this->enterraOsso = enterraOsso;
}
};
class Passaro : public Animal {
public:
bool voar;
Passaro (char* nome, bool voar) : Animal(nome) {
this->voar = voar;
}
};
int main() {
Animal *animal;
animal = new Cachorro("Scooby", true);
std::cout << animal->nome << ", " << animal->enterraOsso << std::endl;
animal = new Passaro("Piopio", false);
std::cout << animal->nome << ", " << animal->voar << std::endl;
return 0;
}
A ideia é que a partir da variável da class super eu poderia acessar os atributos da subclass também.
Não sei se isto é cast ou polimorfismo. No java sei que é possível, mas não estou conseguindo fazer em c++.
Grato desde já pela ajuda de todos....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.
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’
class Animal
{
public: