Class C++类铸件

Class C++类铸件,class,object,casting,Class,Object,Casting,Galera说,我们的目标是从一个地方到另一个地方 伙计们,我正在尝试创建一个对象,该对象可以实例化继承它的其他类型: #include <iostream> #include <cstdlib> class Animal { public: char *nome; Animal (char *nome) { this->nome = nome; } }; class Cac

Galera说,我们的目标是从一个地方到另一个地方

伙计们,我正在尝试创建一个对象,该对象可以实例化继承它的其他类型:

#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;
}
其思想是也从超类访问子类属性

我不知道这是一个强制转换还是多态性,在java中我知道是可能的,但是C++不能做到。p>
感谢您的帮助。

您可以,但基类了解其子类是一种糟糕的设计:

int main() {

    Animal *animal;

    animal = new Cachorro("Scooby", true);
    Cachorro * c = reinterpret_cast<Cachorro*>(animal);
    std::cout << animal->nome << ", " << c->enterraOsso << std::endl;


    animal = new Passaro("Piopio", false);
    Passaro * p = reinterpret_cast<Passaro*>(animal);
    std::cout << animal->nome << ", " << p->voar << std::endl;

}

请用英语提问或发帖。我投票将此问题作为离题题结束,因为它不是用英语的-这是一个只有英语的网站-请尊重网站的规则!